はじめての親子ハイキングに挑戦!! >>

下記の様なグループ分けされたテキストデータを読み込んで

■テキストデータ
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 名やコメントは
同じ情報が入っている場合があります。

この様に情報を関連付けながら変数に代入していきたいと思います。
どんなことでも、参考になりそうなことがありましたら是非是非、ご紹介ください。
宜しくお願い致します。

A 回答 (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";
}
}
---ここまで---

この回答への補足

早速のご回答有難うございます。

ご教示頂いた内容理解できました。関連付けと言うことで多次元ハッシュの構文にこだわって書いていて行き詰っていましたが、ご回答頂いた様なシンプルな方法でも目的を果たせそうですね。

実際のテキストデータには group/list/match/set/コメント 意外にも無駄な記載が多く乗っていますので、そこら辺を振り分けれるロジックを考えてみたいと思います。
ご回答有難うございました。

補足日時:2008/11/09 12:23
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/09 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング