2012-05-13 29 views
1
之間

非常感謝您對早期問題的幫助。Perl:找到_,後面跟着X,其中的東西在

我已經差不多完成了我正在研究的最後一件事 - 特別是ORF(開放閱讀框架)查找程序。到目前爲止,我有一個名爲@ AminoAcidArray1的數組。所有起始密碼子都是「_」,所有終止密碼子都是「X」。

如何計算ORF?換句話說,當「_」後面跟着「X」和隨機可忽略的字符時,我該如何計算數組中的時間?我應該使用什麼樣的循環?我需要一個〜=在那裏我認爲

是的,我知道bioPerl可以很容易地做到這一點,但只有activePerl可用於某種原因。

誠摯的感謝, Shtanto

+0

你能說清楚你想達到什麼嗎?我不知道你在問什麼。 –

+0

當然。數組@AminoAcidArray1出現字符「_」和「X」。我想要計算「_」後面跟着「X」的次數,忽略可能介於兩者之間的任何次數。 因此,只要數組中有一個下劃線字符,就會啓動一個開放閱讀框。只要該下劃線後面跟着數組中的X,開放閱讀框就會停止。 – Shtanto

+0

你需要知道ORF的位置或者有多少? – flies

回答

0

你的問題太具體到您的域名,但我的理解是,你要數出數組中的一些事件,這是我在下面的代碼做(我用perlconsole):

Perl> my @a = qw/az ae ar at ay au pr lf/ 
8 

Perl> my $count = grep /^a/, @a 
6 

Perl> print "$count\n" 
6 
1 

Perl> 
2

首先,當代的activeperl在其主 '的activeperl' 庫Bundle::BioPerl 。這應該允許在某些ActivePerl版本上使用 a BioPerl installation

然後,

print "$-[0]..$+[0]\n" while $orf =~ /_[^X]*X/g; 

打印開始 - (_)和停止包含在 $您的ORF(X)指數ORF如果他們連續(不嵌套)。如果嵌套,那麼你會有 使用稍微複雜的表達式(遞歸)。

BTW。:這是什麼表達

print join ',', @AminoAcidArray1; 

打印您的控制檯上?

RBO

+0

print $「$ - [0] .. $ + [0] \ n」$ orf =〜/ _ [^ X] * X/g; 謝謝,那是我之後的正規表達。奇怪的是,它沒有打印任何東西。我必須用錯誤的變量來使用它。 第二行使輸出看起來很時髦,現在所有的字母都用逗號分開。非常好:) – Shtanto

+0

@Shtanto - 「_Strangely,它不會打印任何東西,雖然_」 - 那麼你必須**插入行** my $ orf = join'',@ AminoAcidArray1;'**在**之前說的路線。 –

1

如果我的理解是正確的,從您的評論:您有一個數組

,你不需要=~運營商。

您需要遍歷數組一次,並記住您稱之爲「閱讀窗口」的當前狀態。說:

my $state = 0; 
my $count = 0; 
for my $item (@array) { 
if ($item eq "_") { 
    if ($state==0) { 
     $state=1; 
    } 
} elsif ($item eq "X") { 
    if ($state==1) { 
     $state=0; 
     $count++; 
    } 
} 
} 

return $count; 
+0

謝謝卡雷爾。這樣的代碼是學生夢想發現的。我調整了我自己的特定數組名稱,交換返回一個常見的打印語句和賓果遊戲,全部完成。關於這件事的好處是,它可以在很多不同的環境下工作。數組遍歷是一種常見的程序要求。 我知道如何根據我對Java的知識來閱讀屏幕上的程序邏輯,但是自己編寫它仍然非常棘手。有點像我的德語:) 對不起,關於如此特定領域。非常感謝您的幫助。 – Shtanto