- ベストアンサー
文字列をカウントするにはどうすればいいのでしょうか?
ファイル読み込み後その中の特定の文字列、「映画」の個数をカウントするというプログラムを次のように作ってみましたが、実際に起動してみるとエラーになります。何かわかる方がいれば教えてください。 #!/usr/local/bin/perl if (open(FH, "data/log.txt")) { @file = <FH>; close(FH); } foreach $count (@file){ $count = ($line =~ tr/映画/映画/); } print $count; exit;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
foreach $count (@file){ $count = ($line =~ tr/映画/映画/); } の部分は foreach $line (@file){ $count = ($line =~ tr/映画/映画/); } じゃないでしょうか? (ループ変数が $count ではなく $line) それから、$countはカウントアップしないと 0/1 になっちゃうような・・・。 それだけではないかもしれないですけど、さしあたり気になったので。
その他の回答 (2)
- galoon
- ベストアンサー率28% (38/133)
ANo.1です。 簡単に変更してみました。 1行の中に複数の文字列が見つかってもカウントは1です。 見つかった数だけカウントアップしたい場合にはもう少し複雑になります。(ほんのちょっとだけ) --- ここから --- #!/usr/local/bin/perl if (open(FH, "data/log.txt")) { @file = <FH>; close(FH); } # カウント初期化 $count = 0; foreach $line (@file){ # '映画'という文字列が含まれているか確認する。 $position = index($line, '映画'); # 存在したらカウントアップ if ($position >= 0) { $count = $count + 1; } } print $count; exit; --- ここまで ---
お礼
丁寧に解説していただきありがとうございました。参考になりました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>internal server よくわからんけど ヘッダを書き出してないですが、大丈夫ですか >カウントアップの方法 $count+=数; あと、trを使って"映画"を正しくカウントすることはできません。 映,画あるいは、それぞれのバイト毎動作するためです。
お礼
ご回答ありがとうございます。確かめてみます。
お礼
ご回答ありがとうございました。とりあえずループ変数をなおしてみました。Perlの文法チェッカーは問題なく通るようになったのですが、サーバ上で動作させると「500 internal server error」となり、動作しません。何かほかに原因が考えられますでしょうか?それからカウントアップの方法は具体的にはどうすればいいのでしょうか?初歩的な質問ばかりですいません。