佐川 昭宏さん、
レスありがとうございます。
教えて頂いたように、一行ずつ読むことにしました。
しかし、あまり速度が変わりませんでした。
ヒントを頂いたので、色々調べましたところ、以下の
様に行うとうまくいきました。有難うございます。
#!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";
なべさんへ。
最初に、ファイルの中身をすべて配列に代入するため
処理が遅いのだと思います。
以下のように、一行ずつ読み込みながら
処理をしてみては?
#!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";
はじめまして。
早速ですが、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;
}
}
です。
どこが悪いのか全然分りません。
誰か、教えて下さい。お願いします。