• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字列を指定して,別のファイルでその文字列が存在する行を出力する)

ファイル内の特定の文字列が存在する行を出力する方法

このQ&Aのポイント
  • Windows XP Pro環境でActiveperlを使用してプログラムをしています。質問は、指定した文字列が別のファイルのどの行に存在するかを出力する方法についてです。
  • 具体的な処理として、指定したテキストファイルから対象の文字列を含む行数を出力するプログラムを作成しましたが、永久ループに入ってしまい、出力されません。
  • 質問者は、自分のプログラムの間違っている点を指摘してほしいと述べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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

oswll
質問者

お礼

ありがとうございました.無事解決することができました.foreachで2重ループをみたことがあったのでそれしか思いつきませんでした.

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

とりあえず気がついたのは @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の外にあるので、ループの度に出力している。 くらいですか。

oswll
質問者

お礼

ご回答ありがとうございました. >$hit = $.; >このループの時点で特殊変数 $. を参照しても期待する値はありません この点以外解決できました.行数を使いたいのはdata.txtの方なのですが, どのようにしたら2つのファイルのうち,1つのファイルについて読み込んだ行数を出力できるのでしょうか.

関連するQ&A