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 に答える