从Bi提问的一个相关问题中,我学会了如何在它下面的线上打印一条匹配线。代码看起来非常简单:如何打印一条匹配线,其中一条线紧靠其上方,另一条线紧靠下方?
#!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程序能够搜索多个文件的内容和显示相关信息,而无需单独打开每个文件。我尝试了谷歌搜索和两个应用程序,代理Ransack和Devas,已被证明是有用的,但他们只显示包含匹配查询的行,我也希望偷看相邻的行。然后,即兴创作一个程序的想法突然出现在我的脑海中。几年前,我对Perl脚本印象深刻,它可以生成维基百科的Tomeraider格式,这样我就可以在我的Lifedrive上轻松地搜索Wiki,并且我还在网上的某个地方阅读过Perl很容易学习,特别是对于像我这样的人在任何编程语言中都没有经验。几天前,我开始自学Perl。我的第一步是学习如何完成“代理Ransack”的工作,并证明使用Perl并不困难。我首先学习了如何搜索单个文件的内容,并通过修改书中标题为“Perl by Example”的示例来显示匹配的行,但我被困在那里。对于如何处理多个文件,我变得完全无能为力。书中没有发现类似的例子,或者因为我太急躁了。然后我再次尝试使用Google搜索,并在这里被引导,并且问了我的第一个问题:“如何在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 le corps dans unedécharge。
我知道你有电线。
Je sais que tu as un micro。
现在我会告诉你实情。
Alors je vais te dire lavérité。
基本上我只需要搜索一个英文短语并查看法语等价物,所以我昨天完成的脚本非常令人满意,只是如果我的脚本可以显示上面的行以防万一我想搜索一个法语短语并检查英语。所以我正在尝试改进代码。其实我知道“印刷标量”是越野车,但它很整洁,并且至少在大多数时间印刷下一行)。我甚至期待打印上一行而不是随后的其他单行魔术线:) Perl似乎很有趣。我想我会花更多的时间试图更好地理解它。正如daotoad所建议的那样,我会研究你们慷慨提供的代码。再次感谢你们!
您可能想考虑获取博客。 *“我觉得我有点感动。”*好吧,是吗? – 2009-10-06 13:07:53
你是英国人吗?你写在一个有点可识别的古典抒情风格。 :) – Ether 2009-10-06 15:02:31
通过实例学习是一件了不起的事情。这个站点和Perlmonks(http://perlmonks.org)是Perl的很好的资源。 SO具有涉及广泛主题的优势。 Perlmonks的优点是专注于Perl。我不希望没有任何一方;) – daotoad 2009-10-06 18:09:19