Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何提取与字符串和下一行匹配的行?_String_Perl_Text Extraction - Fatal编程技术网

String 如何提取与字符串和下一行匹配的行?

String 如何提取与字符串和下一行匹配的行?,string,perl,text-extraction,String,Perl,Text Extraction,我有两个文件,即a.txt和b.txt。我的任务是在b.txt中搜索a.txt的所有字符串。如果a.txt和b.txt的字符串之间有任何匹配,那么我想打印与该字符串对应的行以及文件b.txt中的下一行 我一直在尝试下面提到的代码,但问题是它没有打印任何内容。你能给我指出问题并提出解决办法吗 open fh, "<", "b.txt" or die $!; open fh1, "<", "a.txt" or die $!; my $array1 = < fh>; my

我有两个文件,即
a.txt
b.txt
。我的任务是在
b.txt
中搜索
a.txt
的所有字符串。如果
a.txt
b.txt
的字符串之间有任何匹配,那么我想打印与该字符串对应的行以及文件
b.txt
中的下一行

我一直在尝试下面提到的代码,但问题是它没有打印任何内容。你能给我指出问题并提出解决办法吗

open fh,  "<", "b.txt" or die $!;
open fh1, "<", "a.txt" or die $!;

my $array1 = < fh>;
my $array2 = < fh1>;

while (my $array1 = < fh>) {
    if ($array1 =~ m/$array2/i) {
        print $array1;
        print scalar < fh>;
    }
}

openfh,“试试这样的方法

open  fh, "<", "b.txt" or die $!;
open  fh1, "<", "a.txt" or die $!;

while(my $item1 = <fh>)
{
    while(my $item2 = <fh1>)
    {
        if($item1 =~ m/$item2/i)
        {
            print $item1;
            print <fh>;
        }
    }

    seek fh1, 0, 0;
}

close fh;
close fh1;

打开fh,“我可以帮你得到两个元素数组,我不知道你想如何打印匹配的元素和下一个元素

use Data::Dumper;
open(FH,  "<$file") or die "$!";
open(FH1,  "<$file1") or die "$!";
my @array1 ;
my @array2 ;


while(<FH>) {
    chomp($_);
    push @array1,$_;
}
while(<FH1>) {
    chomp($_);
    push @array2,$_;
}
close(FH);
close(FH1);
print Dumper(@array1);
print Dumper(@array2);
使用数据::转储程序;

开放(FH),以下是显而易见的:

use strict;
use warnings;

my $line1;
my $line2;
my $fh;
my $fh1;
my $counter;

open  $fh, "<", "b.txt" or die $!;
open  $fh1, "<", "a.txt" or die $!;

my @b = <$fh>;
my @a = <$fh1>;

for (@b)
{
    $line1 = $_;
    for (@a)
    {
        $line2 = $_;
        if ($line1 =~ /^$line2$/)
        {
            $counter++;
            open $outfile, ">", "a_${counter}.txt";
            print $outfile $line2;
            close $outfile;
        }
    }
}
使用严格;
使用警告;
我的$line1;
我的$line2;
我的$fh;
我的$fh1;
我的美元柜台;
打开$fh,“,”a_${counter}.txt“;
打印$outfile$line2;
关闭$outfile;
}
}
}

我不太明白的是,你想用标量做什么?

非常感谢BSen,它可以工作,但一旦搜索了a.txt的第一个元素,我想将匹配的数据打印到另一个文件中。即,在a1.txt中搜索第一个元素,在a2.txt中搜索第二个元素,等等。目前在你的帮助下,我可以将所有元素保存在一个文件中。你能帮我修改你给出的代码,完成我在上面的评论中提到的任务吗?如果我确实理解你想要什么,那么在循环之外添加一个变量,在每次匹配时递增它,并打开新文件的句柄(使用变量来形成名称,例如a1,a2…)然后写入并关闭它这是我用u建议的代码尝试的…**打开fh,“>”,“c$i.txt";**i++;**print;**}**}**seek fh1,0,0;**}****close fh;**close fh1;**close fh2;这不起作用..所以你能建议我怎么做吗?不知道你想打印到文件中的是什么,但请尝试一下,非常感谢你的帮助。它只在已搜索a.txt我想将匹配的数据打印到另一个文件中。例如,在a1.txt中搜索第一个元素,在a2.txt中搜索第二个元素,等等。目前在您的帮助下,我可以在一个文件中保存所有元素,这是否意味着您将拥有与匹配数相同的文件?非常感谢您的快速响应,。。。。。是的,我将拥有与匹配数相同的文件。如果我在a.txt中有n个元素,那么将在b.txt中搜索这些n个元素,如果找到所有n个元素的匹配,那么它们将是n个文件。在我的情况下,数字可能在7-10个元素之间变化,因此是7-10个文件。启动计数器,每次获得匹配时,递增计数器,op使用计数器作为文件名的一部分来生成文件
打开我的$outfile,“>”,“a${counter}.txt”
,然后写入并关闭它。这是我想做的,但我无法打印任何文件或生成您提到的任何文件。目前我无法解决问题,我正在尝试解决它。