
ファイルを読み込んで、その中の特定の文字列たとえば"映画"が何個あるかを調べるプログラムを作っているのですが、動作しません。ファイルには、改行やタブが入っているのですが、問題はファイルの読み込み方なのか、カウンタの方なのか分かりません。次がプログラムですので何か分かる方は教えてください。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
テキストファイルで提出とは?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル全てを .xlsm に変更し...
-
python renameについて
-
fgets で値が取得できない
-
drtファイルはどうしたら開...
-
window.open でのファイル指定方法
-
ファイルの存在の有無を確かめ...
-
VBAコードを張り付け後のエクセ...
-
複数ファイルを1つにするシェ...
-
csvファイルの横方向への改行に...
-
WindowsでPerlをする際,1行目の...
-
AutoNts
-
JSP URLに表示される拡張子 .jsp
-
CGIがうまく動作しません。原因...
-
powerpointでwebページとして保...
-
MySQLにバイナリデータを正常に...
-
巨大なテキストの最終行を取得...
-
PerlでのUseless use...
-
Cでのファイルからの入力および...
-
foreach内での変数の扱い?
-
一つのテキストファイルと複数...
おすすめ情報