我开始在perl和我做了这个脚本来读取一个文件。但文件包含超过10k行,如何限制阅读到5行,或第5行和第10行之间?
my $pdb = Structure->new(
-file => 'arq.txt',
-format => 'PB'
);
my $strutur = $pb->next_structure;
foreach my $chain ($strutur->get_chains) {
my $chain_id = $chain->id;
foreach my $residue ($strutur->get_residues($chain)) {
my $residue_id = $residue->id;
print "Chain: ".$chain_id."\tResidue: ".$residue_id."\n";
}
}
首先,我尝试显示五行并打破循环。
use strict;
while(my $strutur = $pb->next_structure) {
print "Chain: ".$chain_id."\tResidue: ".$residue_id."\n";
last if $. == 5;
}
close $pb;
得到输出Global symbol "$strutur" requires explicit package name (did you forget to declare "my $estrutura"?)
然后我试着
use strict;
while( my $residue_id = $residue->id) {
print "Chain: ".$chain_id."\tResidue: ".$residue_id."\n";
last if $. == 5;
}
close $residue;
它只使用第一行就形成了一个无限循环
1条答案
按热度按时间y1aodyip1#
看起来这都是BioPerl的一部分,我对它一点也不熟悉,但是找到文档很容易。
你还没有完全弄清楚你只想要5行的哪一部分。所以让我们来看看你的代码,看看你能做些什么。我肯定你不是指“我怎么读5行”,因为这段代码在文件格式中抽象出了行。我们在这里谈论的是一些东西的实体。我对生物学一无所知,也不知道这些东西是用来做什么的。
我们可以做三件不同的事情,其中一些可以用不同的方法解决。
1.每次调用
$pb->next_structure
,都会得到一个新的结构。如果你想要五个这样的结构,就调用它五次,或者在循环中调用它。我认为这不是你所说的。get_chains()
方法返回与一个结构关联的所有链,我不知道这两个是什么,但我们可以很容易地让它只迭代其中的5个。如果你想得到记录5到9,你可以把它改为
4 .. 8
,索引总是从0开始,要得到5,然后是下一个5,你可以这样做0 ... 4
,然后是5 .. 9
,依此类推。1.为了只处理5个redidue,你做的事情基本上和2中的一样。