Точка общего сценария заключается в следующем:Использование итерационных переменных с регулярным выражением
шаг 1) открыть один файл столбца и считывать первую запись.
этап 2) откройте второй файл, содержащий много строк и столбцов, зачитайте КАЖДУЮ строку по одному и найдите что-нибудь в этой строке, которое соответствует первой записи из первого файла.
step3), если совпадение найдено, то «делать что-то конструктивное», а если нет, то перейти к первому файлу и взять вторую запись и повторите шаг 2 и шаг 3, и так далее ...
здесь сценарий:
#!/usr/bin/perl
use strict; #use warnings;
unless(@ARGV) {
print "\usage: $0 filename\n\n"; # $0 name of the program being executed
exit;
}
my $list = $ARGV[0];
chomp($list);
unless (open(LIST, "<$list")) {
print "\n I can't open your list of genes!!! \n";
exit;
}
my(@list) = (<LIST>);
close LIST;
open (CHR1, "<acembly_chr_sorted_by_exon_count.txt") or die;
my(@spreadsheet) = (<CHR1>);
close CHR1;
for (my $i = 0; $i < scalar @list; $i++) {
print "$i in list is $list[$i]\n";
for (my $j = 1; $j < scalar @spreadsheet; $j++) {
#print "$spreadsheet[$j]\n";
if ($spreadsheet[$j]) {
print "will $list[$i] match with $spreadsheet[$j]?\n";
}
else { print "no match\n" };
} #for
} #for
Я планирую использовать регулярное выражение в строке if ($spreadsheet[$j]) {
, но у меня возникают проблемы на этом этапе, как сейчас. При первом введении линия print "will $list[$i] match with $spreadsheet[$j]?\n";
печатает $list[$i]
OK, но не печатает $spreadsheet[$j]
. Эта строка будет печатать обе переменные правильно на второй и последующих итерациях. Я не понимаю, почему?
Имеет ли это какое-либо отношение к начальному индексу 'my $ j = 1;'? – summea
нет, я пробовал, что это ни на что не влияет. должен был упомянуть об этом. – ES55
Сколько человек входит в первый файл? Может ли несколько записей первого файла совпадать с одной строкой во втором файле? Вы относитесь к каждому матчу одинаково или по-другому, в зависимости от того, что соответствовало? – Kenosis