2017-07-29 118 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"; 
相關問題