AN HTTPD ゲストブック/コメント集(2000年3月30日18:03)


なべ Naoki_watanabe@hotmail.com 2000/03/31 09:40

佐川 昭宏さん、
レスありがとうございます。
教えて頂いたように、一行ずつ読むことにしました。
しかし、あまり速度が変わりませんでした。
ヒントを頂いたので、色々調べましたところ、以下の
様に行うとうまくいきました。有難うございます。

#!perl  
$DataFile = "./test.txt";

undef ($li);
open (LOG, $DataFile);
while (<LOG>) {
( $p1, $p2, $p3 ) = split(/,/,$_,3);
print "有効データ = $li,$p1,$p2,$p3 <br>\n";

# φ(..) Tips
# $_ に、現在行の内容が入っています。 (=$line)
# $. で、現在何行目かを参照可能です。 (=$cnt ?)
$li++;
}
close (LOG);
print "総行数 : $li\n";


佐川 昭宏 sagawa@kamakuranet.ne.jp 2000/03/30 20:22

なべさんへ。

最初に、ファイルの中身をすべて配列に代入するため
処理が遅いのだと思います。

以下のように、一行ずつ読み込みながら
処理をしてみては?

#!perl 
$DataFile = "c:\\foo\\bar";

undef ($li);
open (LOG, $DataFile);
while (<LOG>) {
unless (($p1, $p2, $p3) = /(.*)}{(.*)}{(.*)/ ) {
warn "$.行目に無効なデータです。\n";
next;
}
# マッチしてるなぁ。
print "有効データ = $p1,$p2,$p3 \n";

# φ(..) Tips
# $_ に、現在行の内容が入っています。 (=$line)
# $. で、現在何行目かを参照可能です。 (=$cnt ?)
# $li は、無理なのでインクリメントさせておき、ループの外で参照します。
$li++;
}
close (LOG);
print "総行数 : $li\n";


なべ naoki_watanabe@hotmail.com 2000/03/30 18:03

はじめまして。
早速ですが、CGIなどの実行が非常に遅いです。(特に、ファイルの読込みが)
環境は、Lan環境でサーバは、Win98・Win95どちらも試しました。
ブラウザは、IE5を使用。
ブラウザのProxyの設定でlocalhostはProxyを使わないようにしています。
オプションも一般の「リモートホストを取得」のところを「取得しない」にしてあります。
読込みのロジックは、

    open (LOG, $DataFile); 
@lines = <LOG>;
close (LOG);
$li = @lines;
$cnt = 0;
foreach $line (@lines){
if ($line =~ /(.*)}{(.*)}{(.*)/){
$p1 = $1;
$p2 = $2;
$p3 = $3;
}
}
です。
どこが悪いのか全然分りません。
誰か、教えて下さい。お願いします。