我从 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_refs,因此数据如下所示:
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。