【发布时间】:2010-12-04 04:13:42
【问题描述】:
从 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);
}
};
问题是我仍然不知道如何将它们放在一起。看来我的大脑正在关闭。有没有人有任何想法?
感谢您的帮助。
更新:
我想我有点感动。你们太有帮助了!也许有点跑题了,但我真的有说更多的冲动。
我需要一个能够搜索多个文件的内容并显示相关信息而无需单独打开每个文件的 Windows 程序。我尝试了谷歌搜索,两个应用程序,Agent Ransack 和 Devas,被证明是有用的,但它们只显示包含匹配查询的行,我还想查看相邻的行。然后即兴创作一个程序的想法突然出现在我的脑海中。几年前,我对一个 Perl 脚本印象深刻,它可以生成一个 Tomeraider 格式的 Wikipedia,这样我就可以在我的 Lifedrive 上轻松搜索 Wiki,我还在网上的某个地方读到 Perl 很容易学习,特别是对于像我这样的人来说没有任何编程语言的经验。然后几天前我开始自学 Perl。我的第一步是学习如何完成与“Agent Ransack”相同的工作,事实证明使用 Perl 并不难。我首先通过修改名为“Perl by Example”的书中使用的示例来学习如何搜索单个文件的内容并显示匹配的行,但我被困在那里。我对如何处理多个文件一无所知。书中没有找到类似的例子,或者可能是因为我太不耐烦了。然后我再次尝试谷歌搜索并被带到这里,我问了我的第一个问题“如何在 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";
在“corpus”文件夹中,我有很多文本文件,包括 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 的建议,我会研究你们慷慨提供的代码。再次感谢你们!
【问题讨论】:
-
您可能需要考虑建立一个博客。 “我觉得我有点感动。”嗯,你呢?
-
你是英国人吗?你写的有点可辨认的古典抒情风格。 :)
-
通过示例学习 a 是一件很棒的事情。这个站点和 Perlmonks (perlmonks.org) 是 Perl 的重要资源。 SO 具有涵盖广泛主题的优势。 Perlmonks 具有专注于 Perl 的优势。我不想没有任何一个;)
-
嗨,以太,所以你已经注意到了。好吧,我不是以英语为母语的人。我来自中国。我很惭愧地承认我的专业是英语语言文学。但我的英语真的很烂,书卷气十足,而且毫无希望:(看起来我总是很难意识到社交场合的细微差别。
-
致思南:我不写博客。我曾经有一个,但我懒得每天更新:(但也许在以后的阶段。谁知道呢。好吧,我想我会向我的朋友推荐这个论坛。
标签: perl