Из связанного вопроса, заданного Би, я научился печатать соответствующую строку вместе с строкой, расположенной под ней. Код выглядит очень просто:Как распечатать соответствующую строку, одну строку сразу над ней и одну строку сразу ниже?
#!perl
open(FH,'FILE');
while ($line = <FH>) {
if ($line =~ /Pattern/) {
print "$line";
print scalar <FH>;
}
}
Затем я искал Google для другого кода, который может печатать соответствующие строки с линиями, расположенными непосредственно над ними. Код, который бы частично удовлетворить свою цель что-то вроде этого:
#!perl
@array;
open(FH, "FILE");
while (<FH>) {
chomp;
$my_line = "$_";
if ("$my_line" =~ /Pattern/) {
foreach(@array){
print "$_\n";
}
print "$my_line\n"
}
push(@array,$my_line);
if ("$#array" > "0") {
shift(@array);
}
};
Проблема я до сих пор не могу понять, как сделать их вместе. Кажется, мой мозг закрывается. У кого-нибудь есть идеи?
Спасибо за любую помощь.
UPDATE:
Я думаю, что я вроде прикосновении. Вы, ребята, так полезны! Возможно, немного вне темы, но я действительно чувствую импульс сказать больше.
Мне нужна была программа Windows, способная искать содержимое нескольких файлов и отображать соответствующую информацию без отдельного открытия каждого файла. Я попробовал поиск по Google и два приложения, агент Ransack и Devas, оказались полезными, но они отображают только строки, содержащие согласованный запрос, и я хочу также заглянуть в соседние строки. Тогда идея импровизации программы появилась у меня в голове. Несколько лет назад я был впечатлен сценарием Perl, который мог бы создать формат Википедии Tomeraider, чтобы я мог легко искать Wiki на моем Lifedrive, и я также читал где-то в сети, что Perl легко учиться специально для такого парня, как я, который не имеет опыта программирования на любом языке программирования. Тогда я как-то начал преподавать Perl пару дней назад. Мой первый шаг состоял в том, чтобы узнать, как выполнять ту же работу, что и «Агент Ransack», и это оказалось не так сложно с помощью Perl. Сначала я узнал, как искать содержимое одного файла и отображать соответствующие строки с помощью модификации примера, используемого в книге под названием «Perl by Example», но я застрял там. Я стал совершенно невежественным, как иметь дело с несколькими файлами. Подобных примеров не было найдено в книге или, вероятно, потому, что я был слишком нетерпелив. И затем я снова попробовал googling и был приведен сюда, и я спросил свой первый вопрос: «Как я могу найти несколько файлов для шаблона строк в Perl?» здесь и я должен сказать, что этот форум чертовски УДИВИТЕЛЬНЫЙ;). Потом я посмотрел на более примеры сценариев, а затем я придумал следующий код вчера и служит моей первоначальной цели достаточно хорошо:
Коды выглядит следующим образом:
#!perl
$hits=0;
print "INPUT YOUR QUERY:";
chop ($query = <STDIN>);
$dir = 'f:/corpus/';
@files = <$dir/*>;
foreach $file (@files) {
open (txt, "$file");
while($line = <txt>) {
if ($line =~ /$query/i) {
$hits++;
print "$file \n $line";
print scalar <txt>;
}
}
}
close(txt);
print "$hits RESULTS FOUND FOR THIS SEARCH\n";
В папке «корпус», У меня много текстовых файлов, включая файлы srt pdf doc, которые содержат такое содержимое следующим образом:
Затем я сбросил тело.
J'ai mis le corps dans une décharge.
Я знаю, что у вас есть провод.
Je sais que tu as un micro.
Теперь я скажу вам правду.
Alors je vais te dire la vérité.
В принципе, мне просто нужно найти английскую фразу и посмотреть на французский эквивалент, поэтому сценарий, который я закончил вчера, вполне удовлетворителен, за исключением того, что было бы лучше, если бы мой скрипт мог отображать указанную выше строку в случае, если я хочу выполнить поиск французскую фразу и проверить английский язык. Поэтому я пытаюсь улучшить код. На самом деле я знал, что «скаляр печати» глючит, но он опрятен и делает работу по печати следующей строки, по крайней мере, большую часть времени). Я даже ожидал, что еще одна черная магическая линия печатает предыдущую строку вместо последующих :) Perl кажется забавным. Думаю, я потрачу больше времени, пытаясь лучше понять это. И, как было предложено daotoad, я изучу коды, щедро предлагаемые вами, ребята. Еще раз спасибо вам, ребята!
Возможно, вы захотите рассмотреть вопрос о создании блога. * «Я думаю, что я как бы тронута». * Ну, да? –
Вы британцы? вы пишете в несколько узнаваемом классическом лирическом стиле. :) – Ether
Изучение на примере a - замечательная вещь. Этот сайт и Perlmonks (http://perlmonks.org) - отличные ресурсы для Perl. Преимущество SO состоит в том, что он охватывает широкий круг тем. Преимущество Perlmonks заключается в том, что Perl сосредоточен. Я бы не хотел обойтись без;) – daotoad