Как прочитать опорную линию (начать с RN,RT,RA,RC,RX,RP,RL) и распечатать все

Привет всем, у меня возникла проблема с модулем Perl, поскольку я использую этот модуль для извлечения некоторых конкретных строк из плоского файла, который содержит несколько наборов информации, как я уже упоминал в коде. (Это пример кода Bio::Parse ::SwissProt.pm). Но проблема в том, что всякий раз, когда мы работаем с этим кодом, возникает проблема в выражении Refs. Он выдает ошибку при попытке изменения значения только для чтения вc:/wamp/bin/perl/site/lib/bio/parse/swissprot.pm строке 345. Входной файл выглядит следующим образом

Входной файл (файл Flate)

ID   P72354_STAAU            Unreviewed;       575 AA.
AC   P72354;
DT   01-FEB-1997, integrated into UniProtKB/TrEMBL.
DT   01-FEB-1997, sequence version 1.
DT   29-MAY-2013, entry version 79.
DE   SubName: Full=ATP-binding cassette transporter A;
GN   Name=abcA;
OS   Staphylococcus aureus.
OC   Bacteria; Firmicutes; Bacilli; Bacillales; Staphylococcus.
OX   NCBI_TaxID=1280;
RN   [1]
RP   NUCLEOTIDE SEQUENCE.
RC   STRAIN=NCTC 8325;
RX   PubMed=8878592;
RA   Henze U.U., Berger-Bachi B.;
RT   "Penicillin-binding protein 4 overproduction increases beta-lactam
RT   resistance in Staphylococcus aureus.";
RL   Antimicrob. Agents Chemother. 40:2121-2125(1996).
RN   [2]
RP   NUCLEOTIDE SEQUENCE.
RC   STRAIN=NCTC 8325;
RX   PubMed=9158759;
RA   Henze U.U., Roos M., Berger-Bachi B.;
RT   "Effects of penicillin-binding protein 4 overproduction in
RT   Staphylococcus aureus.";
RL   Microb. Drug Resist. 2:193-199(1996).
 CC   -!- SIMILARITY: Belongs to the ABC transporter superfamily.
CC   -----------------------------------------------------------------------
CC   Copyrighted by the UniProt Consortium, see http://www.uniprot.org/terms
CC   Distributed under the Creative Commons Attribution-NoDerivs License
CC   -----------------------------------------------------------------------
DR   EMBL; X91786; CAA62898.1; -; Genomic_DNA.
DR   ProteinModelPortal; P72354; -.
DR   SMR; P72354; 335-571.
DR   GO; GO:0016021; C:integral to membrane; IEA:InterPro.
DR   GO; GO:0005524; F:ATP binding; IEA:UniProtKB-KW.
DR   GO; GO:0042626; F:ATPase activity
DR   GO; GO:0006200; P:ATP catabolic process; IEA:GOC.
DR   InterPro; IPR003593; AAA+_ATPase.
DR   InterPro; IPR003439; ABC_transporter-like.
DR   InterPro; IPR017871; ABC_transporter_CS.
DR   InterPro; IPR017940; ABC_transporter_type1.
DR   InterPro; IPR001140; ABC_transptr_TM_dom.
DR   InterPro; IPR011527; ABC_transptrTM_dom_typ1.
DR   InterPro; IPR027417; P-loop_NTPase.
DR   Pfam; PF00664; ABC_membrane; 1.
DR   Pfam; PF00005; ABC_tran; 1.
DR   SMART; SM00382; AAA; 1.
DR   SUPFAM; SSF90123; ABC_TM_1; 1.
DR   SUPFAM; SSF52540; SSF52540; 1.
DR   PROSITE; PS50929; ABC_TM1F; 1.
DR   PROSITE; PS00211; ABC_TRANSPORTER_1; 1.
DR   PROSITE; PS50893; ABC_TRANSPORTER_2; 1.
PE   3: Inferred from homology;
KW   ATP-binding; Nucleotide-binding.
SQ   SEQUENCE   575 AA;  64028 MW;  F7E30A85971719B9 CRC64;
     MKRENPLFFL FKKLSWPVGL IVAAITISSL GSLSGLLVPL FTGRIVDKFS VSHINWNLIA
     LFGGIFVINA LLSGLGLYLL SKIGEKIIYA IRSVLWEHII QLKMPFFDKN ESGQLMSRLT
     DDTKVINEFI SQKLPNLLPS IVTLVGSLIM LFILDWKMTL LTFITIPIFV LIMIPLGRIM
     QKISTSTQSE IANFSGLLGR VLTEMRLVKI SNTERLELDN AHKNLNEIYK LGLKQAKIAA
     VVQPISGIVM LLTIAIILGF GALEIATGAI TAGTLIAMIF YVIQLSMPLI NLSTLVTDYK
     KAVGASSRIY EIMQEPIEPT EALEDSENVL IDDGVLSFEH VDFKYDVKKI LDDVSFQIPQ
     GQVSAFVGPS GSGKSTIFNL IERMYEIESG DIKYGLESVY DIPLSKWRRK IGYVMQSNSM
     MSGTIRDNIL YGINRHVSDE ELINYAKLAN CHDFIMQFDE GYDTLVGERG LKLSGGQRQR
     IDIARSFVKN PDILLLDEAT ANLDSESELK IQEALETLME GRTTIVIANR LSTIKKAGQI
     IFLDKGQVTG KGTHSELMAS HAKYKNFVVS QKLTD
//

Часть сценария C:/wamp/bin/perl/bin/perl.exe

use strict;
use warnings;
use Data::Dumper;
use SWISS::Entry;
use Bio::Parse::SwissProt;
my $sp = Bio::Parse::SwissProt->new(FILE =>"me.txt")or die $!;

# Read in all the entries and fill %entries
my $entry_name =  $sp->entry_name( );
print "$entry_name\n";
my $seq_len = $sp->seq_len( );
print "$seq_len\n";
$refs = $sw->refs();
$refs = $sw->refs(TITLE => 1, AUTH => 1);
for my $i (0..$#{$refs}) {
    print "@{$refs->[$i]}\n";

ВЫВОД должен быть таким

[1]
  NUCLEOTIDE SEQUENCE.
  STRAIN=NCTC 8325;
  PubMed=8878592;
  Henze U.U., Berger-Bachi B.;
  "Penicillin-binding protein 4 overproduction increases beta-lactam
  resistance in Staphylococcus aureus.";
  Antimicrob. Agents Chemother. 40:2121-2125(1996).
[2]
  NUCLEOTIDE SEQUENCE.
  STRAIN=NCTC 8325;
  PubMed=9158759;
  Henze U.U., Roos M., Berger-Bachi B.;
  "Effects of penicillin-binding protein 4 overproduction in
  Staphylococcus aureus.";
  Microb. Drug Resist. 2:193-199(1996).
</code></pre>

person meghavarshney    schedule 05.07.2013    source источник
comment
Вы говорите, что ошибка находится в строке 345 модуля Perl, но вы показываете только 16 строк. Показали ли вы строку 345 и если да, то какая? Каков полный текст сообщения об ошибке? Код, который вы показываете, имеет два назначения для $refs, между которыми ничего нет; это выглядит подозрительно.   -  person AdrianHHH    schedule 05.07.2013
comment
Строка @AdrianHHH 365, связанная с модулем perl /bio/parse/swissprot.pm, а не с моим кодом .... я вставил обе строки ссылок, потому что хотел бы показать вам, как я использую этот код (я знаю, что они оба не взаимосвязаны друг с другом, но это два способа получить опорную строку из файла, поэтому я вставил оба) ...... и, наконец, код работает нормально, но я думаю, что проблема в том, что мне не хватает какого-то вызова для получения значений ссылок, потому что '$entry_name\n; напечатать $seq_len\n;' я получаю результаты для этих строк.   -  person meghavarshney    schedule 09.07.2013


Ответы (1)


После некоторого поиска в Интернете выяснилось, что вы используете SWISS::Entry из пакета Swissknife, и кажется, что вы ( или кто-то) скачал Bio::Parse::SwissProt как независимый проект (не часть BioPerl) из sourceforge. Я не знаком ни с одним из этих проектов, но вы можете получить нужную информацию, просто используя Bio::SeqIO от BioPerl. Вот пример получения рефов:

#!usr/bin/env perl

use strict;
use warnings;
use Bio::SeqIO;

my $usage = "perl $0 swiss-file\n";
my $infile = shift or die $usage;

my $io = Bio::SeqIO->new(-file => $infile, -format => 'swiss');
my $seqio = $io->next_seq;
my $anno_collection = $seqio->annotation;

for my $key ( $anno_collection->get_all_annotation_keys ) {
    my @annotations = $anno_collection->get_Annotations($key);
    for my $value ( @annotations ) {
        if ($value->tagname eq "reference") {
            my $hash_ref = $value->hash_tree;
            for my $key (keys %{$hash_ref}) {
                print $key,": ",$hash_ref->{$key},"\n" if defined $hash_ref->{$key};
            }
        }
    }
}

Выполнение этого дает нужную информацию:

authors: Henze U.U., Berger-Bachi B.
location: Antimicrob. Agents Chemother. 40:2121-2125(1996).
title: "Penicillin-binding protein 4 overproduction increases beta-lactam resistance in Staphylococcus aureus."
pubmed: 8878592
authors: Henze U.U., Roos M., Berger-Bachi B.
location: Microb. Drug Resist. 2:193-199(1996).
title: "Effects of penicillin-binding protein 4 overproduction in Staphylococcus aureus."
pubmed: 9158759

BioPerl Feature Annotation HOWTO является полезной страницей для разбора этих типов файлов. Если вы хотите получить записи, а затем проанализировать их, вы можете использовать Bio::DB::Swissprot и добавьте к приведенному выше примеру всего пару строк кода. Я знаю, что это не ответ на вашу конкретную проблему, но это решение, и вы обнаружите, что многие люди могут помочь вам с BioPerl.

person SES    schedule 05.07.2013
comment
Большое спасибо за ваш быстрый ответ и ваше драгоценное время ......... Это то, что я именно с модулем Bio::Parse::SwissProt .. большое спасибо ..... - person meghavarshney; 06.07.2013
comment
@meghavarshney, я не совсем понимаю твой комментарий. Вы говорите, что этот ответ делает именно то, что вы хотите, или вы говорите, что это все еще то, что вы пытались сделать с другим модулем? Моя точка зрения заключалась в том, что использовать BioPerl может быть проще, потому что я разместил рабочее решение выше, и больше людей смогут помочь. - person SES; 07.07.2013
comment
да, я хочу сказать, что получил свой ответ в виде вашего кода (это то, что я именно хочу извлечь с помощью модуля Bio::DB::Swissprot) - person meghavarshney; 08.07.2013
comment
@meghavarshney, я рад, что это решило твою проблему. Вы можете пометить вопрос решенным, если только вы не ищете другой тип решения. Если да, объясните, чтобы я мог расширить свой ответ. - person SES; 08.07.2013
comment
На самом деле моя проблема решена, но я хочу знать, где я ошибаюсь, когда использую модуль Bio::DB::Swissprot, потому что, если я получаю два других поля, это означает, что где-то по ошибке я использую неправильный вызов для получения строки ссылки . - person meghavarshney; 09.07.2013
comment
@meghavarshney, по этому вопросу я рекомендую вам создать новый пост и предоставить все детали, чтобы мы могли помочь. В противном случае невозможно помочь, основываясь только на ваших комментариях. - person SES; 09.07.2013