我想解决以下问题。如何使用Perl脚本动态地替换字符串
我有2个文件。 Address.txt和File.txt。我想用perl脚本将所有A/B/C/D(File.txt)替换为相应的字符串值(从Address.txt文件读取)。它不会替换我的输出文件。我得到了相同的File.txt内容。 我尝试了下面的代码。
这里是文件address.txt
A,APPLE
B,BAL
C,CAT
D,DOG
E,ELEPHANT
F,FROG
G,GOD
H,HORCE
下面是FILE.TXT
A B C
X Y X
M N O
D E F
F G H
这里是我的代码:
use strict;
use warnings;
open (MYFILE, 'Address.txt');
foreach (<MYFILE>){
chomp;
my @data_new = split/,/sm;
open INPUTFILE, "<", $ARGV[0] or die $!;
open OUT, '>ariout.txt' or die $!;
my $src = $data_new[0];
my $des = $data_new[1];
while (<INPUTFILE>) {
# print "In while :$src \t$des\n";
$_ =~ s/$src/$des/g;
print OUT $_;
}
close INPUTFILE;
close OUT;
# /usr/bin/perl -p -i -e "s/A/APPLE/g" ARGV[0];
}
close (MYFILE);
如果我写$ _ = 382 4/A /苹果/克;
然后输出文件很好,A用“Apple”替换。但是,当动态来临时,它不会被取代。
在此先感谢。我是perl脚本语言的新成员。纠正我,如果我哪里错了。
更新1:我更新了下面的代码。现在工作正常。我的问题这个算法的大O。 代码:
#!/usr/bin/perl
use warnings;
use strict;
open(my $out_fh, ">", "output.txt") || die "Can't open the output file for writing: $!";
open(my $address_fh, "<", "Address.txt") || die "Can't open the address file: $!";
my %lookup = map { chomp; split(/,/, $_, 2) } <$address_fh>;
open(my $file_fh, "<", "File1.txt") || die "Can't open the file.txt file: $!";
while (<$file_fh>) {
my @line = split;
for my $char (@line) {
(exists $lookup{$char}) ? print $out_fh " $lookup{$char} " : print $out_fh " $char ";
}
print $out_fh "\n";
}
你没有描述你面临的问题 – Zaid
编辑的问题..我没有得到替换字符串。 –