在两个已知范围内首先查找后停止,打印,然后继续在perl中搜索文件

在两个已知范围内首先查找后停止,打印,然后继续在perl中搜索文件,perl,perltk,Perl,Perltk,我用Perl编写,希望得到帮助 我正试图写一个程序来找到“Bobby”,并用“display”打印文本行 我已经写了这个程序,除了一个小缺陷,它还可以正常工作。 如果“Bobby”在包含“display”的单行下出现多次,它将多次打印该行。请参见下面的示例以了解说明 文本文件包括 display ("Blue") .... .... .... .... display ("Yellow") .... bobby .... bobby bobby .... display ("Red") ....

我用Perl编写,希望得到帮助

我正试图写一个程序来找到“Bobby”,并用“display”打印文本行

我已经写了这个程序,除了一个小缺陷,它还可以正常工作。 如果“Bobby”在包含“display”的单行下出现多次,它将多次打印该行。请参见下面的示例以了解说明

文本文件包括

display ("Blue")
....
....
....
....
display ("Yellow")
....
bobby
....
bobby
bobby
....
display ("Red")
....
.... and so on
我目前的输出是

display ("Yellow")
display ("Yellow")
display ("Yellow")
应该是:

这是我的相关代码:

while(<$AR>){
  $display = $_ if /display/;
  $output_textbox->insert("end", "$display\n") if /"bobby"/i;
}
while(){
$display=$\uIf/display/;
$output\u textbox->insert(“end”,“$display\n”)if/“bobby”/i;
}
我尝试过几种不同的方法,但没有成功。
非常感谢您的帮助

你需要这样的东西:

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

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

谢谢您的帮助,我可以用您给我的示例来解决这个问题。我被它启发了。我需要在代码中添加一个简单的计数器。它告诉我的第二个if语句,在找到一个包含“display”的行之后,只搜索bobby。完美的非常感谢。有关完整解决方案,请参见下面的代码

 while(<$A>){

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

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

}
while(){
如果(/display/){
$display=$\ux;
$count=0;
}
如果((/“$bobby”/i)和($count==0)){
$output_textbox->insert(“end”,“bobby\n”);
$count=1;
}
}

不要使用两个变量,只需使用一个:

while (<$A> {
  $display= $_ if /display/ ;
  if ( /"$bobby"/i ) {
    $output_textbox->insert("end", "$display\n") if $display ;
    $display= undef ;
  }
}
while({
$display=$\uIf/display/;
如果(/“$bobby”/i){
$output\u textbox->insert(“end”,“$display\n”)如果$display;
$display=undef;
}
}

这让我很接近,除了一件事。看看我上面的文本文件,如果bobby在显示器下(“蓝色”)和显示器下(“黄色”),只有显示器(“黄色”)会输出你上面提供的代码。我需要我的程序输出每一行,其中包含bobby。
while (<$A> {
  $display= $_ if /display/ ;
  if ( /"$bobby"/i ) {
    $output_textbox->insert("end", "$display\n") if $display ;
    $display= undef ;
  }
}