2012-05-23 1 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 - две молекулы. Кроме того, внутри одной молекулы имеется несколько фрагментов. Каждый фрагмент разделяется знаком четыре доллара ($$$$). Я новичок в Perl, поскольку я являюсь студентом биомедицинских исследований. Тем не менее, я написал сценарий, который обнаруживает появление $$$$, а затем появление кода молекулы (здесь 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

thanks.But, когда я использую следующий код, 4-я строка печатается в куске 1, однако 5-я строка печатает в другом фрагменте. 'while () { \t my $ молекула = $ _; \t my @ lines = split (/ \ n /); \t print $ lines [3], "\ n"; } 'Я хочу указать, что каждый кусок начинается с $$$$ и 8033 в следующей строке. Таким образом, $$$$ становится первой строкой каждого куска, а 803 становится второй строкой. пожалуйста, помогите – shpr