0

我正在用 Perl 写作,希望得到帮助。

我正在尝试编写一个程序来查找“Bobby”并使用“display”打印文本行。

我已经编写了程序,并且除了一个小缺陷外,它可以正常工作。如果“Bobby”在一行中出现多次,其中包含“display”,它将多次打印该行。请参阅下面的示例以进行说明。

文本文件包括...

display ("Blue")
....
....
....
....
display ("Yellow")
....
bobby
....
bobby
bobby
....
display ("Red")
....
.... and so on

我现在的输出是...

display ("Yellow")
display ("Yellow")
display ("Yellow")

应该是:

display ("Yellow")

这是我的相关代码:

while(<$AR>){
  $display = $_ if /display/;
  $output_textbox->insert("end", "$display\n") if /"bobby"/i;
}

我尝试了一些不同的事情,但没有成功。协助将不胜感激!

4

3 回答 3

1

你需要这样的东西:

if (/"bobby"/i){
   $output_textbox->insert("end", "$display\n");
   last;
}

如果找到“bobby”,“last”将退出循环。

于 2014-01-07T10:03:55.563 回答
0

感谢您的帮助,我能够通过您给我的样本来解决这个问题。我受到了启发。我需要在我的代码中添加一个简单的计数器。它告诉我的第二个 if 语句仅在找到其中包含“显示”的行后才搜索 bobby。完美的!非常感谢。有关完整解决方案,请参见下面的代码。

 while(<$A>){

 if (/display/){
 $display = $_;
 $count=0;
 }

 if ((/"$bobby"/i) && ($count == 0)){
 $output_textbox->insert("end", "bobby\n");
 $count =1;
 }

}
于 2014-01-08T03:27:53.527 回答
0

而不是使用两个变量,只使用一个:

while (<$A> {
  $display= $_ if /display/ ;
  if ( /"$bobby"/i ) {
    $output_textbox->insert("end", "$display\n") if $display ;
    $display= undef ;
  }
}
于 2014-01-08T03:37:22.543 回答