perl数组只打印最后一行
问题描述:
我有一个大约3000行的文件。我将文档中的每个单词与我拥有的参考列表进行匹配。如果该单词与我列表中的单词匹配,那么我将它替换。 现在的问题是代码只打印最后一行,而不打印整个文件。perl数组只打印最后一行
我相信,我的代码是不是有效,将需要很长的时间来处理,反正是有增加的代码
open IN, "drug_list.txt" or die "No such file:$!\n";
open OUT, ">synergy1.txt" or die;
while(<IN>) {
my @a=split /\t/,$_;
$a[0]=~s/\s//g;
$a[1]=~s/\s//g;
$a[2]=~s/\s//g;
$b[$i]=$a[0];
$c[$i]=$a[1];
$d[$i]=$a[2];
++$i;
}
use Data::Dumper;
open FILE, "input.txt" or die "No such file:$!\n";
while(<FILE>) {
my $line= $_;
chomp $line;
$line =~ s/(\)|\()//g;
$line =~ s/,/ ,/g;
$line =~ s/\./ ./g;
@array = split ' ',$line;
for($k=0;$k<$i;++$k) {
foreach $n(@array) {
if($n=~m/^\Q$b[$k]\E$/i) {
$n=~s/$n/<span style="background-color:yellow;">$n<\/span>/;
}
if($n=~m/^\Q$c[$k]\E$/i) {
$n=~s/$n/<span style="background-color:red;">$n<\/span>/;
}
if($n=~m/^\Q$d[$k]\E$/i) {
$n=~s/$n/<span style="background-color:blue;">$n<\/span>/;
}
} # end foreach
} # end for
} # end while
print OUT "@array";
close(FILE);
close(IN);
答
您也close(IN)
和几行后,你尝试做while (<IN>)
。
请提供工作代码和示例数据。否则,要弄清楚问题是什么,这将是一项艰巨的工作。
+0
我编辑了代码,这是一个错误。代码是我发布的代码,详细的解释是我正在检查我的文件的每个单词与我拥有的三个参考列表。上面代码中的三个列表位于第一个while循环中,$ b [$ i],$ c [$ i]和$ d [$ i]就是列表的例子。第二个while循环是文件....希望这有助于 – Pink
你的缩进是可怕的。你应该修复这个问题,以便你可以阅读你自己的代码。 – TLP
我为你修好了。现在很容易发现你的问题:你的语句'print OUT'@array“'在循环之外,因此它只打印分配给它的最后一行。 – TLP