У меня есть файл около 3000 строк. Я сопоставляю каждое слово в документе со списками ссылок, которые у меня есть. Если слово соответствует одному в моем списке, я подставляю его. Проблема в том, что код только печатает последнюю строку, но не весь файл.perl array только печатает последнюю строку
Я уверен, что мой код не так эффективен и займет много времени, чтобы обработать, есть в любом случае для повышения эффективности кода
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);
Ваш отступ ужасный. Вы должны это исправить, чтобы вы могли читать свой собственный код. – TLP
Я исправил его для вас. Теперь довольно легко определить вашу проблему: ваш оператор 'print OUT" @array "' находится за пределами цикла, поэтому он только печатает последнюю назначенную ему строку. – TLP