- ベストアンサー
データからある文字列の次の行を出力する方法
- データから特定の文字列の次の行を出力する方法について教えてください。
- 質問者はperlの初心者で、データから特定の文字列の次の行を出力する方法を知りたいです。
- データは1つのファイルに2000行あり、各行は[X,Y]で始まり、次の[X,Y]の前がデータの範囲となります。出力はCSVファイル形式で、DAT errがある場合はその次の行を出力し、DAT列は空白にします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。最初のブロックに next を入れるのを忘れていました。 if ($_ =~ /DAT err/) { print OUT "PASS,0,"; $flag = 1; next; } if ($flag) { print OUT $_; # 改行が不要の場合は chomp してください $flag = 0; } 質問のコード例では、open の入力ファイルハンドル名 FILE と while のファイルハンドル名 LOG が違っています。 同じファイルハンドル名であれば、2番目の方法も動くはずなのですが?
その他の回答 (1)
- kumoz
- ベストアンサー率64% (120/185)
フラグ変数を用いて出力することができると思います。 if ($_ =~ /DAT err/) { print OUT "PASS,0,"; $flag = 1; } if ($flag) { print OUT $_; # 改行が不要の場合は chomp してください $flag = 0; } また、あまり複雑にすると混乱しますが、1行程度であれば while ブロックの中で 読み込むことも可能だと思います。 if ($_ =~ /DAT err/) { print OUT "PASS,0,"; print OUT scalar(<LOG>); }
お礼
kumoz様 こんばんは。 回答ありがとうございます。 教えて頂いた以下を追記したところ、DAT errの次の行ではなく、 DAT errを含めた行が出力されました。 >f ($_ =~ /DAT err/) { >print OUT "PASS,0,"; >$flag = 1; >} >if ($flag) { >print OUT $_; # 改行が不要の場合は chomp してください >$flag = 0; >} また、以下を追記したところ、何も出力されませんでした。 >if ($_ =~ /DAT err/) { >print OUT "PASS,0,"; >print OUT scalar(<LOG>); >} どうかアドバイスをお願いいたします。
お礼
ありがとうございます。 大変助かりました。