« 2017年10月 | トップページ

2018/01/21

本好きの下克上を読むのに、テキストファイルを連結する

Honzk1


パドラッパさんに教えてもらった本好きの下克上を読みました。


テキストファイルでダウンロードできます。ただ、ファイルを部分ごとにダウンロードする必要があります。本編は677部分に分かれるので、面倒です。
ファブレットでWebで読んだりしましたけれど、テキストほど扱いやすくないので、どうも困ります。

最初、縦書きPDFなら一括でダウンロードできるので、PDFからコピペでテキストにして読んでいました。ところが、これだとページ番号やよみがなが途中に入ってしまってうまくありません。
面倒だけれど、とにかくテキストファイルですべての部分ファイルを手動でダウンロードしました。

複数のファイルを連結するのはcatしました。ところが、ファイル末尾に改行がないことがほとんどで、catで連結するとファイル先頭の題が前回の末尾にくっついてしまって読みにくいです。

とりあえずPerlで、


open(OUT, ">>alltxt.out");
while($line = <>) {
print OUT $line;
}
print OUT "\n----------\n";
close(OUT);

のようにして、
perl inscrlf.pl %1
というバッチファイルを、
for %%F in (*.txt) DO ins.bat %%F
のように呼び出してみます。これでとりあえずできそうですけれど、他にも問題がありました。ファイル名に部分ごとの連番が付くのですけれど、桁数が異なるとソート順が変わってしまい、順番が狂うのです。

部分ごとにダウンロードしたファイルは、
N4830BU-1.txt
とか、
N4830BU-10.txt
とか、
N4830BU-677.txt
のようになっているのです。

もう一つ、最近Windowsの設定をするときに、常用のPCにはActivePerlをそもそもインストールしていませんでした。Windows 10 でbashが使えるようになり、今ではアプリでUbuntuが入れられるので、そちらで十分になってきたのです。

そういうわけで、Windows 10のUbuntu上で作業することにして、Perlもバッチもやめてしまいます。

Pythonで書くか、shスクリプトで書くか。と思ってググったら、mvでなくrenameというのが便利そうです。これでいこう。

#!/bin/sh
rename 's/-(\d).txt/-0$1.txt/' *.txt
rename 's/-(\d\d).txt/-0$1.txt/' *.txt
echo '----------------------------------------\r\n' >alltxt.out
for file in `\find . -name '*.txt'`; do
    cat $file >> alltxt.out
    echo '\r\n----------------------------------------\r\n' >>alltxt.out
done

「inscrlf.sh」をダウンロード

ワンライナーでなく、SSでも再利用しそうだったので、shスクリプトをinscrlf.shのように改行コードLFでファイルに保存します。

これで、ダウンロードしたテキストファイルをひとつのフォルダに入れておき、Windows 10のUbuntuで、
./inscrlf.sh
とすることで、ひとつに連結したテキストファイルを得られるようになりました。

最近のWindowsがbashを使えたり、アプリでUbuntuを入れられたりするのは、かつての状況からすると本当に良くなりました。個人的に心証が良く、とても好意的にとらえています。


Honzk

| | コメント (1) | トラックバック (0)

« 2017年10月 | トップページ