下面是我正在使用的脚本,它执行得很好,除了它在文件末尾添加了三个额外的花括号。
abc.jso
包含许多行,其中只有几行只有开/关大括号(以防万一,此信息有帮助)
我尝试用print $a " $var";
代替print $a "$var";
。简而言之,我在此print
前面添加了空格,并且它起作用了。
open (my $a,'+<',"abc.jso") or die $!;
my @lines=<$a>;
seek $a,0,0;
while (@lines) {
my $var = shift @lines;
if ($var=~ /^\s*\"(netlist|filelist)\" : \".*$blk.*\",/) {
print $a " \"netlist\" : \"/t98/pnr/work/$blk"."_rk/run/dc/$blk"."_post_dft.v\",\n";
$count++;
print "Netlist got replaced\n";
}
elsif ($var=~ /^\s*\"spf\" : \".*$blk.*\"/) {
print $a " \"spf\" : \"/t98/scan/atpg/t98_1.0/spf/$blk".".scan_compress.spf\"\n";
$count++;
print "SPF got replaced\n";
}
else {
print $a "$var";
}
}
close($a);
有人可以解释为什么会这样吗?是否有我不知道的文本处理这种极端情况?
答案 0 :(得分:2)
具有一些示例输入和输出会有所帮助,但让我猜测一下。尝试通过搜索将文件截断:
truncate $a,0;
seek $a,0,0;
没有截断,您将覆盖之前的内容。如果您编写的信息多于阅读的信息,则此方法有效,但如果编写的信息少于阅读的信息,则效果不好。