私は Perl を使い始めており、while ループで行ごとにテキストを解析していますが、この特定の問題に関するヘルプが見つかりませんでした。現在のテキスト行で以前に読んだテキスト行の情報を使用したいと思います。
私のコードは次のとおりです。
while(<data>){
my $message = substr $_, 0, 1;
if ($message eq 'A'){
my $order_ref = substr $_, 1, 9;
my $order_book = substr $_, 20, 6;
push @add_orders, $_;
print add_order_file "$order_ref,$order_book\n";
}
if ($message eq 'X'){
my $order_ref = substr $_, 1, 9;
#now I would like to use order_ref to look up order_book from a previous line of text
# where the message is equal to A,
my $order_book = LOOKED UP VALUE FROM PREVIOUS TEXT;
push @add_orders, $_;
print add_order_file "$order_ref,$order_book\n";
}
}
「A」メッセージは常に「X」メッセージの前にあるため、order_ref 番号を含む X エントリが表示された場合は、スクロールして戻って関連する A メッセージを見つけ、そこから order_book 変数を引き出すことができます。これにはある種の正規表現が関係していることはわかっていますが、Perl に前の行だけを検索させる方法がわかりません。ありがとう!
編集:これについてはもっと明確にする必要があります。「A」メッセージは「X」メッセージに先行しますが、すべて異なる order_ref を持つことができるため、データは次のようになります。
A order_ref1, order_book1
A order_ref2,order_book2
A order_ref3,order_book1
X order_ref2
X order_ref1
X オーダーの場合、order_ref2 と order_ref1 を使用して order_book を検索します。