2

フリップフロップ演算子についてさらにサポートが必要です。以下は私のサンプルデータです。

LS             SPID     ASP            SPID
3-59           MGW05    
SLC ACL PARMG ST                   SDL                             SLI
 0  A1  17    C7STH-1&&-31         MSC19-0/RTLTB2-385
LS             SPID     ASP            SPID
3-618          ETRC18   
SLC ACL PARMG ST                   SDL                             SLI
 0  A2   0    C7ST2C-4             ETRC18-0/RTLTB2-417
 1  A2   0    C7ST2C-5             ETRC18-0/RTLTB2-449
END

関心のあるデータは、文字列'LS SPID ASP SPID'で始まり、次の'LS SPID ASP SPID'またはEND(次のLS行がない場合)で終わります。フリップフロップ演算子を使用してこれを取得することは可能ですか?このデータを配列(@linesread)に読み込んでから、以下のコードを使用して配列をループしようとしましたが、機能していません。同じ行を2回ループできないため、問題が発生しますか?他の解決策はありますか?

PS:必要に応じて...演算子を使用しています。

foreach (@linesread) {
    if (/^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
    print "$. \t $_\n";
    }
}   
4

1 に答える 1

3

範囲演算子自体は、左側をすぐに評価するように構成することはできません。しかし、あなたは試すことができます

if (my $r = /^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
    print "$. \t $_\n";
    redo if $r =~ /E0$/;
}
于 2012-01-04T13:44:39.703 に答える