從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