0

我有一个文件 a.txt,我有一个文件 b.txt。我正在阅读这两个文件。

让我们假设 a.txt 有:

Apple is a fruit.
I like java.
I am an human being.
I am saying hello world.

可以说 b.txt 有

I am the planet earth

现在我正在尝试在 a.txt 中搜索特定字符串,例如:我是人类。如果我找到这一行。我想将 b.txt 中的内容附加到 a.txt。我的输出文件应该看起来像这样

Apple is a fruit.
I like java.
I am the planet earth---->appended
I am an human being.
I am saying hello world.

我在下面尝试,但没有帮助

open (FILE1 , "a.txt")
my (@fpointer1) = <FILE>; 
close FILE1

open (FILE2 , "b.txt")
my (@fpointer1) = <FILE>; 
close FILE2

#Open the a.txt again, but this time in write mode
open (FILE3 , ">a.txt")
my (@fpointer1) = <FILE>; 
close FILE3

foreach $line (@fpointer1) {

if (line to be searched is found)
--> Paste(Insert) the contents of file "b.txt" read through fpointer2

}
4

2 回答 2

1

这是一个相当快速和肮脏的工作示例:

use warnings;
use 5.010;

open FILE, "a.txt" or die "Couldn't open file: $!"; 
while (<FILE>){
$string_A .= $_;
}

open FILE, "b.txt" or die "Couldn't open file: $!"; 
while (<FILE>){
$string_B .= $_;
}
close FILE;

$searchString = "I am an human being.";


$resultPosition = index($string_A, $searchString);

if($resultPosition!= -1){

$endPosition = length($string_A)+length($string_B)-length($searchString);

$temp_String  =  substr($string_A, 0, $resultPosition).$string_B." ";


$final_String =$temp_String.substr($string_A, $resultPosition, $endPosition) ;
}
else {print "String not found!";}

print $final_String;

可能有更有效的方法来做到这一点。但你可以有一个想法。

于 2012-10-22T12:03:39.577 回答
0

这是一个例子

use strict;

open(A, ">>a.txt") or die "a.txt not open";
open(B, "b.txt") or die "b.txt not open";

my @text = <B>;
foreach my $l (@text){
        if ($l =~ /I am the planet earth/sg){
                print A $&;
        }
}

我想,像这样……

于 2012-10-22T12:15:05.267 回答