我想解決以下問題。如何使用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
編輯的問題..我沒有得到替換字符串。 –