• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データからある文字列の次の行を出力するには)

データからある文字列の次の行を出力する方法

このQ&Aのポイント
  • データから特定の文字列の次の行を出力する方法について教えてください。
  • 質問者はperlの初心者で、データから特定の文字列の次の行を出力する方法を知りたいです。
  • データは1つのファイルに2000行あり、各行は[X,Y]で始まり、次の[X,Y]の前がデータの範囲となります。出力はCSVファイル形式で、DAT errがある場合はその次の行を出力し、DAT列は空白にします。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

すみません。最初のブロックに next を入れるのを忘れていました。 if ($_ =~ /DAT err/) { print OUT "PASS,0,"; $flag = 1; next; } if ($flag) { print OUT $_; # 改行が不要の場合は chomp してください $flag = 0; } 質問のコード例では、open の入力ファイルハンドル名 FILE と while のファイルハンドル名 LOG が違っています。 同じファイルハンドル名であれば、2番目の方法も動くはずなのですが?

noname#72292
質問者

お礼

ありがとうございます。 大変助かりました。

その他の回答 (1)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

フラグ変数を用いて出力することができると思います。 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>); }

noname#72292
質問者

お礼

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>); >} どうかアドバイスをお願いいたします。

関連するQ&A