本好きの下克上を読むのに、テキストファイルを連結する
パドラッパさんに教えてもらった本好きの下克上を読みました。
テキストファイルでダウンロードできます。ただ、ファイルを部分ごとにダウンロードする必要があります。本編は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
ワンライナーでなく、SSでも再利用しそうだったので、shスクリプトをinscrlf.shのように改行コードLFでファイルに保存します。
これで、ダウンロードしたテキストファイルをひとつのフォルダに入れておき、Windows 10のUbuntuで、
./inscrlf.sh
とすることで、ひとつに連結したテキストファイルを得られるようになりました。
最近のWindowsがbashを使えたり、アプリでUbuntuを入れられたりするのは、かつての状況からすると本当に良くなりました。個人的に心証が良く、とても好意的にとらえています。
| 固定リンク
コメント
やはり苦労していらっしゃいますね。私も、この小説が気に入ってダウンロードしたのですが、一つ一つダウンロードは大変で一度、挫折しました。
そこで、Nokia携帯電話のPythonで、指定した開始番号から終わり番号までを纏めてダウンロードして連結するスクリプトを作成してダウンロードしました。今では、これを使って200近い小説をダウンロードして読んでいます。
投稿: masa | 2018/01/31 20:04
頂きました(^^)/
ただ、一括ファイルも作成するところでファイル順が狂うことがあったので、
for file in `\find . -name '*.txt'`; do
を
for file in `\find . -name '*.txt' | sort`; do
にしています。
一括ダウンロードするスクリプトを、いまから私のブログで紹介しますので、ご参考まで。
投稿: パドラッパ | 2020/02/23 11:32