- ベストアンサー
ファイル内の特定の文字列が存在する行を出力する方法
- Windows XP Pro環境でActiveperlを使用してプログラムをしています。質問は、指定した文字列が別のファイルのどの行に存在するかを出力する方法についてです。
- 具体的な処理として、指定したテキストファイルから対象の文字列を含む行数を出力するプログラムを作成しましたが、永久ループに入ってしまい、出力されません。
- 質問者は、自分のプログラムの間違っている点を指摘してほしいと述べています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どのようにしたら2つのファイルのうち,1つのファイルについて読み込んだ行数を出力できるのでしょうか. スクリプトの先頭で一気読みをしなければ良いと思うのですが、 一気読みの必要性はあるのですか? use strict; use warnings; use feature ':5.10'; open my $file2, '<', 'sansyo.txt' or die "can't open input $!"; chomp(my @subjects = <$file2>); close $file2; open my $newfile, '>>', 'output.txt' or die "can't open output $!"; open my $file, '<', 'data.txt' or die "can't open input $!"; while (my $line = <$file>) { chomp $line; foreach my $subject (@subjects) { if ($line =~ $subject){ say {$newfile} $.; } } } close $file; close $newfile; output.txt の内容 2 4 6
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
とりあえず気がついたのは @file = <FILE>; close(FILE); @file2 = <FILE2>; close(FILE2); chomp していないので改行コードがついたまま。 >if ($line =~ $line2){ 右辺と左辺が逆。 >$hit = $.; このループの時点で特殊変数 $. を参照しても期待する値はありません open(NEWFILE, " >> output.txt") or die "$!"; print NEWFILE $hit; close(NEWFILE); ifの外にあるので、ループの度に出力している。 くらいですか。
お礼
ご回答ありがとうございました. >$hit = $.; >このループの時点で特殊変数 $. を参照しても期待する値はありません この点以外解決できました.行数を使いたいのはdata.txtの方なのですが, どのようにしたら2つのファイルのうち,1つのファイルについて読み込んだ行数を出力できるのでしょうか.
お礼
ありがとうございました.無事解決することができました.foreachで2重ループをみたことがあったのでそれしか思いつきませんでした.