2012-05-23 42 views
0

我有一個要讀取的SD文件。我無法上傳整個文件。所以我在下面的圖片中給出了一個快照。讀取SD文件並提取有關每個片段的信息

A SD file (Structural data file) that explains the structure of a molecule. 803 and AMH are two molecules. Also, within same molecule there are several fragments. Each fragment is separated by four dollar sign ($$$$). 這是解釋分子結構的SD文件(結構數據文件)。 803和AMH是兩個分子。而且,在同一分子內有幾個片段。每個片段由四個美元符號($$$$)分隔。我是一名新生兒,因爲我是一名生物醫學研究生。然而,我寫了一個腳本,它查找了$$$$的出現,然後發現了它旁邊的分子代碼(這裏是803)。

{ 
    open (FILE, '<', "try_803.txt");  
    my $ligandcode="803";  
    while (<FILE>) { 
     my $nextline = <FILE>;  
     if ($_=~/\x24\x24\x24\x24/ && $nextline=~/$ligandcode/){  
      # do something 
     }  
    }  
} 

此代碼檢查的$$$$非常首次出現,隨後803不過,我希望它去進一步的$$$$下一次出現,隨後803,我不知道有多少次數會發生這種模式。從技術上講,我無法在手前指定片段號。你能幫我改進這個代碼並找到問題的解決方案嗎?我會很感激。

回答

0

您可以輸入記錄分隔符設置爲四個DOLAR跡象,換行和803

local $/ = '$$$$' . "\n803"; 

然後,你可以在一個循環中讀取整個分子:

while (<FILE>) { 
    my $molecule = $_; 
} 
+0

謝謝。有效。但是這個腳本正在通過$分子的整塊。我想單獨訪問每一行以執行其他功能。請幫忙 – shpr

+0

'@lines = split(/ \ n /);' – tripleee

+0

謝謝。但是當我用下面的代碼第4行打印在第1塊中時,第5行打印的是其他塊。 'while(){ \t my $ molecule = $ _; \t my @ lines = split(/ \ n /); \t print $ lines [3],「\ n」; '我想要指定每個塊以$$$$開頭並且在下一行中以8033開頭。所以$$$$成爲每個塊的第一行,803成爲第二行。請幫忙 – shpr