2017-07-29 116 views
-2

如何打印第一次出现的蛋白质序列?对于这个查询,我得到了四个结果,我只想要第一个结果。如何打印每个迭代的搜索序列的第一个结果?

use Bio::DB::GenBank; 
use Bio::DB::Query::GenBank; 

$query  = "LEGK"; 
$query_obj = Bio::DB::Query::GenBank->new(
    -db => 'protein', 
    -query => $query 
); 

$gb_obj = Bio::DB::GenBank->new; 

$stream_obj = $gb_obj->get_Stream_by_query($query_obj); 

while ($seq_obj = $stream_obj->next_seq) { 

    # do something with the sequence object 
    print 
     ">$query", ' ', 
     $seq_obj->display_id, ' ', 
     $seq_obj->desc, "\n", 
     $seq_obj->seq[, '\n'; 

while循环应该是这样的

while ($seq_obj = $stream_obj->next_seq) { 

    # do something with the sequence object 
    print $seq_obj->display_id, "\t", $seq_obj->length, "\n"; 
} 
+1

这不会编译。请发布足够的代码,以便它可以在不修复语法错误的情况下运行,除非这些是问题的一部分。这为任何试图帮助你的人创造了额外的工作!另外,请在文件的开始部分使用'strict strict;'和'use warnings''。 – bytepusher

+2

嗯,我已经发布了一个答案。如果没有用,请尝试更详细地解释您要查找的内容。这是一个perl论坛,我不是一个遗传学家;) – bytepusher

+2

@MTG:请不要编辑你的问题,以便对任何已发布的答案或评论做出废话。我已恢复您不正确的Perl代码并将您的新代码添加为更新。 – Borodin

回答

1

我与你的摘要中看到的主要问题是,它不会编译。 将use strict; use warnings;放在所有perl程序的开头。 这会提醒您语法错误。

我不知道很多关于生物,但是,你遍历序列对象,但后来制作与$seq_obj->seq[,'\n'

首先是一个比较奇怪的电话,打电话的功能,使用(),不[][]表示对数组的引用。其次,seq似乎用于设置或获取序列值,我看不到'\n'将是一个有效的值。

所以

while ($seq_obj = $stream_obj->next_seq) { 
    print join(' ', $seq_obj->display_id, $seq_obj->desc)."\n"; # or use 'say' 
    print $seq_obj->seq() . "\n"; 
} 

应打印所有序列。为了得到公正第一,根本就没有所有结果遍历(这就是我理解你的问题):

更换,而(){}有:

my $first_seq_obj = $stream_obj->next_seq; 
print join(' ', $first_seq_obj->display_id, $first_seq_obj->desc)."\n"; # or use 'say' 
print $first_seq_obj->seq() . "\n"; 
相关问题