作者: 閑舎
日時: 2002/9/29(23:45)
dune <FZH01112@...> さん wrote.

> -o kekka.txt でも >kekka.txt でも同じですが、出力の行末が   
> \x0D\x0D\x0A になってます。

ほんとに。エンバグですね。直しました。

> 以前のバージョンでは正常なので、binmode とか MAC の改行コー
> ドを意識した今回の修正で、改行コードに依存したコードを書いて
> しまったのではないでしょうか。例えば行単位の処理のはずが、改
> 行を認識できずにファイル全体を処理しようとしてるとか。

改めてどこの処理に時間を食っているかチェックしたところ、

  open(IN, "$FILE") or die;
  binmode(IN);
  read(IN, $LINE, 99999999);
  close(IN);

の部分でした。私の認識だと、99999999 Bytes を限度に読みこもうとし、デー
タがなくなったら read を止める、と捉えていましたが、どうやら、本当に 
99999999 Bytes までディスク領域を読むみたいで(^^;。ここを

  open(IN, "$FILE") or die;
  binmode(IN);
  $LINE = $buff = "";
  while (read(IN, $buff, 8192)) {
    $LINE .= $buff;
  }
  read(IN, $LINE, 99999999);
  close(IN);

に代えると、さっと終るようです(ノートでなく、VMware 上の WinXP での確
認)。99999999 にしたのは、将来的にデータベースのサイズが大きくなった時、
ループが少ないから、この方が速いだろうとの考えでしたが、完全に逆だったよ
うです(^^;。

 もう少ししたら、直しを入れた Ver.0.64 をアップします。お騒がせしました。

--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/