• 締切済み

perlでテキスト複数行を関連付けしながら変数に代入していく方法を教えてください。

下記の様なグループ分けされたテキストデータを読み込んで ■テキストデータ group 1 list one match hogehoge1 hogehoge2 set pogepoge1 pogepoge2 group 2 list two match hogehoge1 hogehoge2 set pogepoge1 pogepoge2 ・・・・・・・・ この様に、複数の group で、中にはいくつかの list が存在し、 その中に match/set でコメントが書かれていまして これらを、『group,list,match/set,コメント』 の様にカンマ区切りにしたいです。 ■perl 実行後 group 1,list one,match,hogehoge1 group 1,list one,match,hogehoge2 group 1,list one,set,pogepoge1 group 1,list one,set,pogepoge2 group 2,list two,match,hogehoge1 group 2,list two,match,hogehoge2 group 2,list two,set,pogepoge1 group 2,list two,set,pogepoge2 なお、group の中には list がない場合もあります。。 # この場合はカンマ間を空白にしたい group 1,,match,hogehoge1 group 名は一意な名前がついていますが、list 名やコメントは 同じ情報が入っている場合があります。 この様に情報を関連付けながら変数に代入していきたいと思います。 どんなことでも、参考になりそうなことがありましたら是非是非、ご紹介ください。 宜しくお願い致します。

みんなの回答

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

こんな感じですか? ---ここから--- use strict; my($group, $list, $matchset); while (<>) { chop; if (/^group/i) { $group = $_; $list = $matchset = ''; } elsif (/^list/i) { $list = $_; $matchset = ''; } elsif (/^(match|set)/i) { $matchset = $_; } elsif (/\S/) { print "$group,$list,$matchset,$_\n"; } } ---ここまで---

perl00
質問者

お礼

すいません、補足とお礼を間違えました。。 改めて御礼申し上げます。有難うございました。

perl00
質問者

補足

早速のご回答有難うございます。 ご教示頂いた内容理解できました。関連付けと言うことで多次元ハッシュの構文にこだわって書いていて行き詰っていましたが、ご回答頂いた様なシンプルな方法でも目的を果たせそうですね。 実際のテキストデータには group/list/match/set/コメント 意外にも無駄な記載が多く乗っていますので、そこら辺を振り分けれるロジックを考えてみたいと思います。 ご回答有難うございました。

関連するQ&A