Perl搜索仅显示最后结果

时间:2012-05-27 15:57:38

标签: perl search

我有两个数组,一个是搜索词,另一个是从文件中提取的多行。我有一个嵌套的foreach语句,我正在寻找所有组合,但只有最后一场比赛才显示,即使我知道有很多其他比赛!我尝试了很多不同版本的代码,但这是我的最后一个:

open (MYFILE, 'searchTerms.txt');
open (MYFILE2, 'fileToSearchIn.xml');

@searchTerms = <MYFILE>;
@xml = <MYFILE2>;

close(MYFILE2);
close(MYFILE);
$results = "";

foreach $searchIn (@xml)
{
    foreach $searchFor (@searchTerms)
    {
        #print "searching for $searchFor in: $searchIn\n";
        if ($searchIn =~ m/$searchFor/)
        {
            $temp = "found in $searchIn \n while searching for: $searchFor ";
            $results = $results.$temp."\n";
            $temp = "";
        }
    }
}

print $results;

2 个答案:

答案 0 :(得分:0)

chomp您要删除换行符的输入:

open (MYFILE, 'searchTerms.txt');
open (MYFILE2, 'fileToSearchIn.xml');

@searchTerms = <MYFILE>;
@xml = <MYFILE2>;

close(MYFILE2);
close(MYFILE);
$results = "";

foreach $searchIn (@xml)
{
    chomp($searchIn);
    foreach $searchFor (@searchTerms)
    {
        chomp($searchFor);
        #print "searching for $searchFor in: $searchIn\n";
        if ($searchIn =~ m/$searchFor/)
        {
            $temp = "found in $searchIn \n while searching for: $searchFor ";
            $results = $results.$temp."\n";
            $temp = "";
        }
    }
}

print $results;

基本上,你认为你正在搜索'a',但实际上它正在搜索'a \ n',因为它是读取输入的方式,除非你使用chomp。它仅在'a'是最后一个字符时匹配,因为在这种情况下,它将由换行符继续。

答案 1 :(得分:0)

您应始终在程序开始时use strictuse warnings,并使用my在首次使用时声明所有变量。这尤其适用于您在寻求代码帮助时,因为此措施可以快速揭示许多简单的错误。

正如Raze2dust所说,重要的是要记住从文件中读取的行将具有尾随换行符"\n"。如果您正在检查一对行之间的完全匹配,那么这无关紧要,但由于它不适合您,我认为searchTerms.txt中的字符串可以在任何地方出现 / em>在fileToSearchIn.xml的行中。这意味着您需要使用searchTerms.txt来自use strict; use warnings; use File::Slurp; my @searchTerms = read_file('searchTerms.txt', chomp => 1); my @xml = read_file('fileToSearchIn.xml'); my @results; foreach my $searchIn (@xml) { foreach my $searchFor (@searchTerms) { if ($searchIn =~ m/$searchFor/) { push @results, qq/Found in "$searchIn"\n while searching for "$searchFor"/; } } } print "$_\n" for @results; 的字符串;另一个文件中的行可以保持不变。

使用chomp模块可以更轻松地完成这样的事情。它为您完成所有文件处理,如果您要求,它将从输入文本中选择任何换行符。

我已将程序更改为使用此模块,以便您可以看到它的工作原理。

{{1}}