- ベストアンサー
行数をカウントするプログラムで期待する結果が得られない
- 掲示板をperlで作るという課題に取り組んでいるが、行数をカウントするプログラムで期待する結果が得られない。
- プログラムはPOSTされたコメントをdata.datに追記するもので、行数をコメントの先頭に表示する。
- 試した結果、open(HOGE, ">> $myfile");やwhile(<HOGE>){$count = $count + 1;};の変更でも結果に変化はなかった。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
+>>をご使用なので、ファイルハンドラが最後に移動してないでしょうか。 ハンドラが最後に移動しているので、whileは実行されておらず、常にファイル末尾に1行目が出力されるというシナリオを想像します。 Perlfaqを使用して… $lines = 0; $filename = "yahho.txt"; open(FILE, "+<$filename") or die "Can't open `$filename': $!"; #open に+<を使用 while (sysread FILE, $buffer, 4096) { $lines += ($buffer =~ tr/\n//); print "p"; } print FILE ++$lines . "やっほ~\n"; 注意 open時にファイルの存在は保証してください。存在しない場合エラーです。
その他の回答 (2)
- hirotn
- ベストアンサー率59% (147/246)
当該Perlfaqは以下のURLです。 http://perldoc.jp/docs/perl/5.14.1/perlfaq5.pod 「あるファイルの行数を数えるには」 が該当します。 数えた後はファイルハンドラは終端になっているのでご希望の処理を追加するようにしています。
お礼
こういったサイトをまず最初に確認すべきなのですね。 教えていただきありがとうございます、次回からまずは perldoc から情報を探してみます。
- kmee
- ベストアンサー率55% (1857/3366)
open(HOGE, ">> $myfile"); は「追加書き込み」モードでファイルを開きます。 while(<HOGE>){ で「読む」ことができるでしょうか?
お礼
kmee 様 ご返信ありがとうございます。 +>> でも試してみたところ意図通りに動かなかったのですが、 +> だと期待する動作が得られました。 細かな違いまで意識が及んでおらず、気がつけておりませんでした。 コメントありがとうございました。
お礼
hirotn 様 ご指摘のとおりでした。ありがとうございました。