これ何て呼びますか

xyz.logというテキストファイルがあります。
構成は長さは不定ですが、1レコードが12個の"<>"で区切られたフィールドを持ちます。
01<>abc<><>5<>33<>~<>82<> のような。

教えて欲しいのは、
このファイルの最後のレコードの10番目のフィールドの値を「0」にしたいのです。

最後のレコードはpop,pushで触れるのは分かるのですが、
そのレコードの編集の方法が分かりません。

@lines = <IN>;
$wkrec = pop(@lines);
********************************* ここの部分
push (@lines,$wkrec);

宜しくお願いします。

質問者からの補足コメント

  • 出来ました。

    @tmp = split(/<>/,$lines[-1]);
    @tmp[9] = "0";
    $lines[-1]=join('<>',@tmp);

    コレでいいですよね。
    スッキリしました。

      補足日時:2016/02/26 20:58

A 回答 (2件)

意図がわかりやすいのは split かな.



ちなみに「配列 @lines の最後の要素」は
$lines[-1]
で取れるからね. push や pop で配列をいじるよりもこっちの方がいいと思うよ.
    • good
    • 0
この回答へのお礼

早速有り難うございます。
>push や pop で配列をいじるよりも
 まさにその通りかと思いますが動きが取れません。

 お手数をお掛けしますが、
 具体的なコードをお願いできますでしょうか。
 宜しくお願いいたします。

お礼日時:2016/02/26 18:13

@a=split(/<>/,$wkrec);


$a[9]='0';
$wkrec=join('<>',@a);

または

$wkrec =~ s/^((?:.*?<>){9}).*?(<>|$)/${1}0${2}/;
    • good
    • 0
この回答へのお礼

早速有り難うございました。
完成しました。

joinで繋ぐことを知りませんでした。
考えたらsplitの逆なのですね。
お世話になりました。

お礼日時:2016/02/26 18:10

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