我是Perl的新手,需要做一些听起来很简单的事情-但不知道该怎么做!
我有一个充满随机长度字符串的文件(每行一个),并且正在使用Needleman-Wunsch算法的修改版本来估计属于[ACTG] *的字符串的最长公共子序列的预期长度。
为了进行这样的估算,我应该将文件中的每个字符串与文件中的所有其他字符串进行比较。
我认为是这样的:
open IN "filename";
while (my $line1 = <IN>) {
defined (my $line2 = <IN>) or last;
#Needleman-Wunsch comparison
#add each comparison result to a total
}
#compute average and output to file down here
会工作-但我不确定这是正确的。我认为这只会一次读取文件的两行,而不是以嵌套的方式遍历文件。时间复杂度并不是真正的问题,因此不必太在意。
您要么需要将整个文件保存到内存中
use strict;
use warnings;
use autodie;
open my $fh, '<', "filename";
my @lines = <$fh>;
for my $i (0..$#lines) {
for my $j (0..$#lines) {
#Needleman-Wunsch comparison
#add each comparison result to a total
}
}
或打开同一文件的两个文件句柄:
use strict;
use warnings;
use autodie;
use Fcntl;
open my $fh1, '<', "filename";
open my $fh2, '<', "filename";
while (<$fh1>) {
seek($fh2, 0, SEEK_SET); # Rewind fh
while (<$fh2>) {
#Needleman-Wunsch comparison
#add each comparison result to a total
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句