我正在使用perl编写一个程序,它从一个文件读取一个值并在其他文件中替换该值。程序运行成功,但价值没有被取代。请告诉我错误在哪里。
use strict;
use warnings;
open(file1,"address0.txt") or die "Cannot open file.\n";
my $value;
$value=<file1>;
system("perl -p -i.bak -e 's/add/$value/ig' rough.sp");
这里我要替换的值存在于address0.txt文件中。它是单个值1.我想在其他文件rough.sp。
中放置此值代替add我的rough.sp看起来像
Vdd 1 0 add
我的地址0.txt看起来像
1
因此输出应该像
Vdd 1 0 1
请帮帮我。提前致谢
答案 0 :(得分:0)
假设adress0.txt和rough.sp中的行之间存在1:1的关系,您可以这样继续:
use strict;
use warnings;
my ($curline_1,$curline_2);
open(file1, "address0.txt") or die "Cannot open file.\n";
open(file2, "rough.sp") or die "Cannot open file.\n";
open(file3, ">out.sp") or die "Cannot open file.\n";
while (<file1>) {
$curline_1 = $_;
chomp($curline_1);
$curline_2 = <file2>;
$curline_2 =~ s/ add/ $curline_1/;
print file3 $curline_2;
}
close(file1);
close(file2);
close(file3);
exit(0);
说明:
代码并行迭代输入文件的行。请注意,读取的行包括行终止符。来自'address'文件的行内容将被视为.sp文件中add
文字的替换值。消除了'address'文件中的行终止符,以避免引入其他换行符。
附录:
多次替换的扩展程序可能如下所示:
$curline_1 = $_;
chomp($curline_1);
my @parts = split(/ +/, $curline_1); # splits the line from address0.txt into an array of strings made up of contiguous non-whitespace chars
$curline_2 = <file2>;
$curline_2 =~ s/ add/ $parts[0]/;
$curline_2 =~ s/ sub/ $parts[1]/;
# ...