ファイルを読み込んで、その中の特定の文字列たとえば"映画"が何個あるかを調べるプログラムを作っているのですが、動作しません。ファイルには、改行やタブが入っているのですが、問題はファイルの読み込み方なのか、カウンタの方なのか分かりません。次がプログラムですので何か分かる方は教えてください。
if (open(FH, "data/log.txt")) {
@file = <FH>;
close(FH);
}
while(<STDIN>){
$movie=0;
if(@file == "映画" ){
$movie++;
}
print $movie;
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
箇数が知りたいだけなら全てを @file に入れる必要はありません。
(後で内容を別のことに使う場合は別ですが)。で、行の中に「映画」が何個含まれているかは
$count = 0;
$count++ while(/映画/g);
で出せます。(これは $_ に対して比較しているので $_ =~ /映画/g と同じです)。
ファイル全体ということならばこんな感じでしょう。
open(F, '< ファイル名') or die;
$count = 0;
while (<F>) {
$count++ while (/映画/g);
}
close(F);
但し行末に「映」があって次の行頭に「画」がある場合はこれでは数えられません。そういうのもカウントしたい場合はやはり全部読んだ方が簡単です。読むとメモリが足りなくなるぐらい大きいファイルの場合は行末の1文字が「映」の場合にそれを記録しておき、次の行を読んだ時に先頭が「画」かどうかを調べるということをすればできます。
No.2
- 回答日時:
こんな感じでイイと思います。
if (open(FH, "data/log.txt")) {
local $/ = undef;
$file = <FH>;
close(FH);
}
$movie=($file=~s/映画/映画/g);#trはうまくない
print $movie;
No.1
- 回答日時:
問題なのはカウンタ部分です。
プログラムの一文一文がどういう動作をするのか、しっかり理解しましょう。
if (open(FH, "data/log.txt")) {
@file = <FH>;
close(FH);
}
ここまでで、読み込んだファイル(data/log.txt)の内容は@fileという配列に読み込まれています。
あとは、foreachループを使って@fileの中から1行ずつ取り出し、それぞれに"映画"の文字がいくつ入っているかを数えます。
文字列の中に"映画"の文字がいくつ入っているかは、
$count = ($line =~ tr/映画/映画/);
と書くと、$countに$line中にある"映画"の文字の数が入ります。
あと、$movieの初期化はループの外でしないといけません。
これだけのヒントでプログラムが組めます。あとは自力で頑張ってみてください。
この回答への補足
次のように作ってみましたが、実際に起動してみるとエラーになります。まだどこかおかしいでしょうか?
#!/usr/local/bin/perl
if (open(FH, "data/block.txt")) {
@file = <FH>;
close(FH);
}
foreach $count (@file){
$count = ($line =~ tr/映画/映画/);
}
print $count;
exit;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
perl言語のプログラム不良
-
MATLABのm-fileについて
-
並び方、
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
ReadLineでの読み出し行を指定する
-
batファイルでrenameができませ...
-
openした後、closeしないでプロ...
-
Windowsで複数のファイルを同じ...
-
バッチファイルの作り方(CSV→...
-
microsoft multimedia control ...
-
Edge スクレイピング
-
perlで複数行のデータを自由に...
-
sprintfについて
-
JavaでCSVファイルを高速に読む...
-
「パスが見つかりません」とい...
-
fopenでディレクトリ内の全ファ...
-
ListBoxのデータを高速でファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python renameについて
-
fgets で値が取得できない
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
ファイル全てを .xlsm に変更し...
-
read() on unopened filehandle...
-
csvファイルの横方向への改行に...
-
VBAコードを張り付け後のエクセ...
-
Firefox で file:// で始まる U...
-
JSP URLに表示される拡張子 .jsp
-
drtファイルはどうしたら開...
-
並び方、
-
重複ファイル名ある場合ファイ...
-
VBA テキストファイルを読み取...
-
cgiでサーバーにファイルを追加...
-
HTMLのフォームで画像と文...
-
WindowsでPerlをする際,1行目の...
-
バイナリファイルの出力
-
Perlでのパーミッション変更の仕方
-
foreach内での変数の扱い?
おすすめ情報