2014-01-07 2 views
0

Я пишу в Perl и хотел бы получить помощь.Остановить после первого поиска в пределах двух известных, распечатать, а затем продолжить поиск файла в perl

Я пытаюсь написать программу, чтобы найти «Бобби» и напечатать строку текста с помощью «дисплея».

Я уже написал программу и имею ее работу, за исключением одного небольшого недостатка. Если «Бобби» присутствует несколько раз под одной строкой с «дисплеем» в нем, он будет печатать эту строку несколько раз. См. Пример ниже для уточнения.

Текстовый файл содержит ...

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; 
} 

Я пробовал несколько разных вещей, но безуспешно. Помощь была бы принята с благодарностью!

ответ

0

Спасибо за вашу помощь, я смог разобраться с образцом, который вы мне дали. Я был вдохновлен этим. Мне нужно было добавить простой счетчик в мой код. Он сообщает мой второй оператор if только для поиска bobby сразу после нахождения строки, в которой есть «отображение». Отлично! Большое спасибо. Для полного решения см. Код ниже.

while(<$A>){ 

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

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

} 
1

Вам нужно что-то вроде этого:

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

«Последняя» выйдет из цикла, если «бобби» будет найдено.

+0

Это получает меня близко за исключением одной вещи. – Spartakus

+0

Посмотрев на мой текстовый файл выше, если бобби были отображены («Синий») и под дисплеем («Желтый»), выводится только дисплей («Желтый») с кодом, который вы указали выше. Мне нужно, чтобы моя программа выводила каждую строку с дисплеем, содержащим в себе бобби. – Spartakus

0

Вместо использования двух переменных, просто используйте один:

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