---hoge.txt---
<aaa>
hoge.a
</zzz>
<bbb>
hoge.b
</zzz>
<ccc>
hoge.c
</zzz>
<aaa>
hoge.a
</zzz>
<bbb>
hoge.b
</zzz>
<ccc>
hoge.c
</zzz>
<aaa>
hoge.a
</zzz>
・
・
・
繰り返し
---hoge.txt---
上記ファイルを読み込んで、「<aaa>」から対応した「</zzz>」の部分を抜き出しその部分を<xxx>と置換を行いたいです。
イメージとしては、読み込んだファイルを配列に入れて、一行づつ読ませ、キーワード「aaa」が現れたらそこでフラグを立て、またキーワード</ZZZ>が現れたらフラグを立て、その部分以外はnextで飛ばす処理を繰り返して行いたいと考えています。
---hogehoge.txt---
<xxx>
hoge.a
</xxx>
<xxx>
hoge.a
</xxx>
<xxx>
hoge.a
</xxx>
・
・
・
---hogehoge.txt---
のようなイメージで表示させたいのですが、
私の理解不足もあり、現状作成したスクリプトでは、うまくいきません。
そこで質問させていただきました。下記の様なスクリプトの形で作成したいと考えています。
どうかよろしくお願いいたします。
---現状作成したスクリプト---
```
use utf8;
use strict;
open(IN,"<","hoge.txt");
open(OUT,">>","hogehoge.txt")or die"error:$!";
my $flag = 0;
while (my $data = <IN>) {
if($data =~ /</zzz>/){
$flag = 0;
}elsif ($data =~ /<aaa>/){
$flag = 1;
#フラグ0と1の範囲の指定を行いたい
}elsif ($flag){
$data =~ s{</zzz>}{</xxx>}g;
$data =~ s{hoge.a}{hoge.aaa}g;
$data =~ s{<aaa>}{<xxx>}g;
print OUT $data;
}else{
next
}
}
close(IN);
close(OUT);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/10/22 13:05
2017/10/22 13:16
退会済みユーザー
2017/10/22 14:21
2017/10/22 14:55