IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

parser des fichier .xml en perl


Sujet :

Modules Perl

  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut parser des fichier .xml en perl
    salut à tous,
    quelqu'un aurait il un script perl permettant de parser de fichiers xml, je rame please , que ce soit avec des modules sax ou dom, importe.
    Oubien en perl standard. J'ai fouileer pleins de doc , mais c pas trop clair
    merci

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Y'a des choses déjà faites et utilisées, faut en profiter...
    Y'a XML:arser par exemple.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bonjour à toi,

    sois un peu plus précis STP.
    S'il s'agit juste de récupérer qq données ici et là les expressions régulières de PERL feront très bien l'affaire.

    Si tu as besoin d'un traitement plus pointu alors effectivement le module SAX sera intéressant.

    La balle est dans ton camp.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je voudrais récupérer des données dans mon fichier xml, ce serait pour parser une banque de données (interpro pour les connaisseur, banque de données bio). Ces données sont soit dans les balises, donc correspondent aux attirbuts, soit entre certaines balises. J'ai trouvé un programme SAX me permettant de choper les balises ouvrantes et fermantes, ainsi que les attibuts, mais je souhaiterais certaines donnéesentre des balises particuliere, comment faire.
    Les modules bioperl ne sont pas tres efficaaces, et j'ai un peu de mal,
    merci.
    Voici le programme sax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
      package MyHandler;
      use strict;
      sub new { my $type = shift; return bless {}, $type; }
      sub start_element {
        my ($self, $el) = @_;
        print "Start $el->{Name}\n";
        my %a = %{ $el->{Attributes} };
        foreach (keys %a) {
          print "  Attribut $_ => $a{$_}\n";
        }
      }
      sub end_element { my $self=shift; my $el=shift; print "End $el->{Name}\n"; }
     
      package main;
      use strict;
      use XML::Parser::PerlSAX;
      import MyHandler;
      my $my_handler = MyHandler->new;
      my $parser = XML::Parser::PerlSAX->new( Handler => $my_handler );
      die "I need an XML file as argument" unless $ARGV[0];
      $parser->parse( Source => { SystemId => $ARGV[0] } );
    voici mon fichier xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE interprodb SYSTEM "interpro.dtd">
    <interprodb><release><dbinfo dbname="INTERPRO" version="7.2" entry_count="10709" file_date="29-MAR-2004 00:00:00" />
          <dbinfo dbname="SWISS" version="42.11" entry_count="146193" file_date="01-MAR-2004 00:00:00" />
          <dbinfo dbname="TREMBL" version="25.11" entry_count="1070786" file_date="01-MAR-2004 00:00:00" />
          <dbinfo dbname="PRINTS" version="37.0" entry_count="1850" file_date="19-SEP-2003 00:00:00" />
          <dbinfo dbname="PREFILE" version="N/A" entry_count="131" file_date="12-OCT-2003 00:00:00" />
          <dbinfo dbname="PROSITE" version="18.10" entry_count="1659" file_date="12-OCT-2003 00:00:00" />
          <dbinfo dbname="PFAM" version="12.0" entry_count="7316" file_date="01-FEB-2004 00:00:00" />
          <dbinfo dbname="PRODOM" version="2002.1" entry_count="1021" file_date="28-NOV-2002 00:00:00" />
          <dbinfo dbname="SMART" version="4.0" entry_count="663" file_date="19-JAN-2004 00:00:00" />
          <dbinfo dbname="TIGRFAMs" version="3.0" entry_count="1977" file_date="16-OCT-2003 00:00:00" />
          <dbinfo dbname="SSF" version="1.63" entry_count="552" file_date="08-OCT-2003 00:00:00" />
          <dbinfo dbname="PIRSF" version="2.41" entry_count="219" file_date="01-OCT-2003 00:00:00" />
        </release><interpro id="IPR000001" type="Domain" short_name="Kringle" protein_count="183"><name>Kringle</name>
        <abstract>
    Kringles are autonomous structural domains, found throughout the blood clotting and fibrinolytic proteins.
    Kringle domains are believed to play a role in binding mediators (e.g., membranes,
    other proteins or phospholipids), and in the regulation of proteolytic activity
    <cite idref="PUB00002414"/>, <cite idref="PUB00001541"/>, <cite idref="PUB00003257"/>.
    Kringle domains <cite idref="PUB00003400"/>, <cite idref="PUB00000803"/>, <cite idref="PUB00001620"/> are characterised by a triple loop, 3-disulphide bridge structure, whose  conformation is defined by a number of hydrogen bonds and small pieces of  anti-parallel beta-sheet. They are found in a varying number  of  copies  in some plasma proteins including prothrombin and urokinase-type plasminogen activator, which are serine proteases belonging to MEROPS peptidase family S1A.
    </abstract>
        <example_list>
          <example>
            <db_xref dbkey="P00748" db="SWISS" />Blood coagulation factor XII (Hageman factor) (1 copy)
          </example>
          <example>
            <db_xref dbkey="P00749" db="SWISS" />Urokinase-type plasminogen activator (1 copy)
          </example>
          <example>
            <db_xref dbkey="Q04756" db="SWISS" />Hepatocyte growth factor activator (1 copy)
          </example>
          <example>
            <db_xref dbkey="P06867" db="SWISS" />Plasminogen (5 copies)
          </example> 
          <example>
            <db_xref dbkey="P26927" db="SWISS" />Hepatocyte growth factor like protein (4 copies)
          </example>
          <example>
            <db_xref dbkey="P00735" db="SWISS" />Thrombin (2 copies)
          </example>
          <example>
            <db_xref dbkey="P15638" db="SWISS" />Tissue plasminogen activator (TPA) (2 copies)
          </example>
          <example>
            <db_xref dbkey="P08519" db="SWISS" />Apolipoprotein A (38 copies)
          </example>
        </example_list>
        <pub_list>
          <publication id="PUB00002414">
            <author_list>McMullen B.A., Fujikawa K.</author_list>
            <title>Primary structure of the heavy chain of human factor XIIa.</title>
            <db_xref db="PUBMED" dbkey="3886654" />
            <journal>J. Biol. Chem.</journal>
            <location firstpage="5328" lastpage="5341" volume="260" />
            <year>1985</year>
          </publication>
          <publication id="PUB00001541">
            <author_list>Patthy L., Trexler M., Vali V., Banyai L., Varadi A.</author_list>
            <title>Kringles: Modules specialized for protein binding.</title>
            <db_xref db="PUBMED" dbkey="6373375" />
            <journal>FEBS Lett.</journal>
            <location firstpage="131" lastpage="136" volume="171" />
            <year>1984</year>
          </publication>
          <publication id="PUB00003257">
            <author_list>Atkinson R.A., Williams R.J.P.</author_list>
            <title>Solution structure of the kringle 4 domain from human plasminogen by 1H nuclear magnetic resonance spectroscopy and distance geometry.</title>        <db_xref db="PUBMED" dbkey="2157850" />
            <journal>J. Mol. Biol.</journal>
            <location firstpage="541" lastpage="552" volume="212" />
            <year>1990</year>
          </publication>
          <publication id="PUB00003400">
            <author_list>Castellino F.J., Beals J.M.</author_list>
            <title>The genetic relationships between the kringle domains of human plasminogen, prothrombin, tissue plasminogen activator, urokinase, and coagulation factor XII.</title>
            <db_xref db="PUBMED" dbkey="3131537" />
            <journal>J. Mol. Evol.</journal>
            <location firstpage="358" lastpage="369" volume="26" />
            <year>1987</year>
          </publication>
          <publication id="PUB00000803">
            <author_list>Patthy L.</author_list>
            <title>Evolution of the proteases of blood coagulation and fibrinolysis by assembly from modules.</title>
            <db_xref db="PUBMED" dbkey="3891096" />
            <journal>Cell</journal>
            <location firstpage="657" lastpage="663" volume="41" />
            <year>1985</year>
          </publication>
          <publication id="PUB00001620">
            <author_list>Ikeo K., Takahashi K., Gojobori T.</author_list>
            <title>Evolutionary origin of numerous kringles in human and simian apolipoprotein(a).</title>
            <db_xref db="PUBMED" dbkey="1879523" />
            <journal>FEBS Lett.</journal>
            <location firstpage="146" lastpage="148" volume="287" />
            <year>1991</year>
          </publication>
        </pub_list>
        <found_in>
          <rel_ref ipr_ref="IPR003966" />
          <rel_ref ipr_ref="IPR008293" />
        </found_in>
        <member_list>
          <db_xref protein_count="151" db="PRINTS" dbkey="PR00018" name="KRINGLE" />
          <db_xref protein_count="179" db="PROFILE" dbkey="PS50070" name="KRINGLE_2" />
          <db_xref protein_count="196" db="PROSITE" dbkey="PS00021" name="KRINGLE_1" />
          <db_xref protein_count="178" db="PFAM" dbkey="PF00051" name="Kringle" />
          <db_xref protein_count="171" db="PRODOM" dbkey="PD000395" name="Kringle" />
          <db_xref protein_count="149" db="SMART" dbkey="SM00130" name="KR" />
        </member_list>
        <external_doc_list>
          <db_xref db="BLOCKS" dbkey="IPB000001" />
          <db_xref db="PDB" dbkey="1a0h" />
          <db_xref db="PDB" dbkey="1bht" />
          <db_xref db="PDB" dbkey="1i71" />
          <db_xref db="PDB" dbkey="1jfn" />
          <db_xref db="PDB" dbkey="1ki0" />
          <db_xref db="PDB" dbkey="1krn" />
          <db_xref db="PDB" dbkey="1pkr" />
          <db_xref db="PDB" dbkey="1pml" />
          <db_xref db="PDB" dbkey="1tpk" />
          <db_xref db="PDB" dbkey="1urk" />
          <db_xref db="PDB" dbkey="2hpq" />
          <db_xref db="PDB" dbkey="2pf1" />
          <db_xref db="PDB" dbkey="2pf2" />
          <db_xref db="PDB" dbkey="2pk4" />
          <db_xref db="PDB" dbkey="3kiv" />
          <db_xref db="PDB" dbkey="5hpg" />
          <db_xref db="MEROPS" dbkey="S1" />
          <db_xref db="PDOC" dbkey="PDOC00020" />
        </external_doc_list>
        <structure_db_links>
          <db_xref db="CATH" dbkey="2.40.20.10.1" />
          <db_xref db="SCOP" dbkey="g.14.1.1" />
        </structure_db_links>
        <taxonomy_distribution>
          <taxon_data name="Arthropoda" proteins_count="4" />
          <taxon_data name="Chordata" proteins_count="167" />
          <taxon_data name="Eukaryota" proteins_count="183" />
          <taxon_data name="Green Plants" proteins_count="1" />
          <taxon_data name="Metazoa" proteins_count="178" />
          <taxon_data name="Nematoda" proteins_count="4" />
          <taxon_data name="Plastid Group" proteins_count="5" />
        </taxonomy_distribution>
      </interpro>
    </interprodb>
    Please, help
    djibril [/b]

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    help!!!!

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Re bonjour,

    ton fichier d'entrée m'a l'air assez conséquent.
    En perl c'est tout à fait faisable mais pas très fiable si tu ne blinde pas ton code.
    Je pense que dans ton cas une petite XSL et un processeur XSLT comme XSLTProc feraient très bien l'affaire.

    En ce qui concerne le XSLTProc c'est un processeur de XSL écrit en C ... donc très rapide et basé sur un moteur SAX.
    XSLTProc est en général dispo sur toutes les distrib linux ou unix.
    Au pire il se trouve et s'installe facilement : http://packages.debian.org/unstable/text/xsltproc
    Si vraiment tu es dans l'urgence envoie moi un fichier XML complet que tu as à traiter ainsi que la liste des données que tu voudrais extraire et je t'écrirai ta XSL (y'en a pas pour plus d'1/2 heure si tu ne veux pas faire des trucs tordus)

    Voilà c'est tout ce que je peux faire.

    A++

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bonjour Rohd'man,
    Merci pour ton aide, je connais pas le XSL et XSLT, je vais jeter un coup d'oeil sur le site de l'laltruiste, histoire de me faire une idée.
    Je t'aurais bien envoyé le fichier xml complet, mais il fait 31Mo (interpro.xml téléchargé sur EBI, je sais pas si tu connais). Mais comme je l'ai ecris ci dessus, c le format de base, je peux t'envoyer un fichier contenant les info sur deux proteines, et tu verras le format général!!!!
    Je pense que si tu peux me le faire sur un petit fichier, je pourrais l'etendre sur tout, non? j'en sais rien. Car les données que je veux extraire sont les mêmes pour tous.
    Alors si c possible de t'envoyer les 31 Mo, no probleme, ou bien je te donne l'address du site ou je l'ai telechargé (sous unix)? sinon je t'envoie un fichier complet sur deux prot avec les info à extraire? C'est comme tu veux en fonction de ton temps, de tes disponibilités, c'est urgent.
    Je te remercie pour tout
    Djibril

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai pas trop lu ton probleme par contre j'ai recupéré des données xml dans une page web à partir d'un fichier xml voila comment je fais si ca peux t'aider. En lisant le code source tu peux trouver l'original du xml


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    #!/usr/bin/perl
     
    #Script qui permet d'extraire une partie du fichier d'info guilde de goa et de l'afficher à l'écran.
    #il faut ensuite rediriger la sortie de façon à obtenir une page web
    # ex: server-stat.pl > server.php
     
    use warnings;
    use LWP::UserAgent;
    use XML::Parser;
     
    my $export;
    my $char;
    my $member;
    my $upd;
    my $lwrp=0;
     
      # Create a user agent object
      my $ua = LWP::UserAgent->new();
      $ua->agent("Colymar/0.1 ");
      $ua->timeout(30);
     
      # Create a request
      my $req = HTTP::Request->new(GET => 'http://camelot-europe.goa.com/herald/servers/Broceliande/guilds/11.xml');
     
      #Pass request to the user agent and get a response back
      my $res = $ua->request($req);
      #Check response
      #if success parse
      if ($res->is_success) {
     
     
    #Parser xml
    my $parser = new XML::Parser(Style=>'Subs', Pkg=>'SubHandlers', ErrorContext => 2);
    $parser->setHandlers(Char  => \&char_handler);
     
    $parser->parse($res->content);
     
    }
     
    # ---------------------------------------------
     
    sub char_handler
    {
        my ($p, $data) = @_;
        $export=$data;
     
    }
     
    # ---------------------------------------------
     
    package SubHandlers;
     
    sub guild_status {
    	print  "<html>\n<head></head>\n";
    	print '<body bgcolor="#000000" text="#808080">';
    	print "\n";
    	#affichage embleme Cy
    	print '<table border="0" width="100%">';
    	print "\n<tr>\n";
    	print '<td width="8%" valign="top"><img border="0" src="images/Embleme_cy_daoc.gif" width="34" height="44"></td>';
    	print "\n";
    	}
    sub guild_status_ {
    	#fermeture tag
    	print  "</body>\n</html>";;
    	}
     
    sub guild {
     
      my $expat = shift; my $element = shift;
      # Read the attributes
      while (@_) {
        my $att = shift;
        my $val = shift;
        $attr{$att} = $val;
      }
       my $name = $attr{'name'};
       my $activechars = $attr{'activechars'};
       my $activemembers = $attr{'activemembers'};
       my $guildrp = $attr{'guildrp'};
       my $timestamp = $attr{'timestamp'};
     
     
       print '<td width="92%"><b><font color="#C0C0C0" size="3">';
       print "$name</font></b>\n";
       #Affichage Guild RP
       print "<br><br>\n<table>\n<tr>\n";
       print '<td noWrap><font size="1">Guild RP:</font></td>';
       print "\n<td>";
       print '<font size="1">';
       print "$guildrp</font></td></tr>\n";
     
     
      $char=$activechars;
      $member=$activemembers;
      $upd=$timestamp;  
    }
     
    sub guild_ {
    	#Affichage du LWRP
    	print "<tr>\n<td noWrap>";
    	print '<font size="1">Guild LRP:</font></td>';
    	print "\n<td>\n";
    	print '<p align="right"><font size="1">';
    	print "$lwrp</font></p>\n</td>\n</tr>\n";
    	print "\n</td>\n</tr>\n</table>\n</td>\n</tr>\n</table>\n";
    	#Affichage Active char
    	print '<table border="0" width="100%">';
      print "\n<tr>\n<td noWrap>";
      print '<font size="1">Active Chars:</font></td>';
      print "\n<td>\n";
      print '<p align="right"><font size="1">';
      print "$char</font></p>\n</td>\n</tr>\n";
      #Affichage Active member
      print "<tr>\n<td noWrap>";
      print '<font size="1">Active Member:</font></td>';
      print "\n<td>\n";
      print '<p align="right"><font size="1">';
      print "$member</font></p>\n</td>\n</tr>\n</table>\n";
      #Affichage mise a jour
      print '<p align="right"><font size="1" color="#666666">';
      print "Updated : $upd</font></p></td>\n";
     
     
    }
     
    sub lastweekrp {
    	}
     
    sub lastweekrp_{
    	$lwrp= $lwrp+$export;
    	}

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Salut Djibril,

    envoie moi l'url du fichier à télécharger (du boulot ça ne devrait pas me prendre très longtemps) ainsi que la liste et la mise en forme des données que tu veux récupérer.
    Je verrais ce que je peux faire mais je ne te promets rien parce que j'ai déjà expérimenté les XSL sur un fichier de 3 Mo et ça prenait du temps alors 31 Mo ... ça va être chaud mais si je n'essaie pas je ne saurai pas.
    Si ça ne fonctionne pas le meilleur moyen pour des fichiers de cette taille reste le perl, et je dois avoir qq bouts de codes en stock pour régler ton pb.

    A++

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Salut Rhod'man,
    Voici l'url du fichier à parser: http://www.ebi.ac.uk/FTP/
    Ensuite c'est dans databases, c'est interpro/interpro.xml.gz
    ou bien essaye l'adresse ftp://ftp.ebi.ac.uk/pub/databases/interpro

    Les données que je souhaiterais récupérer sont en gras:

    Pour chaque proteines, les info dans cette balises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -     <interpro id="[b]IPR000001[/b]" type="[b]Domain[/b]" short_name="[b]Kringle[/b]" protein_count="183"> 
    -     Les données qui sont entre la balise <abstract>[b]....[/b]</abstract> 
    -     Dans la balise <member_list>: <db_xref protein_count="[b]151[/b]" db="[b]PRINTS[/b]" dbkey="[b]PR00018[/b]" name="[b]KRINGLE[/b]" /> 
    -     dans les balises <publication id="[b]PUB00001620[/b]">
    Voilà en gros les infos dont j'aurais besoins. Je te remercie
    A++
    djibril

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je me suis fait un script tout con en Perl, et ça à l'air pas mal aussi, mais bon si je peux avoir un truc plus propre, ce serai meilleur je pense, voilà mon script:
    #!/usr/bin/perl -w
    use strict;
    use Carp;
    use DBI;
    my $id;
    my $type;
    my $name;
    my $file=$ARGV[0];
    my $abstract_open="no";
    my $abstract;

    open (FILE, $file) || die "impossible d'ouvrir le fichier '$file':$!";
    while(<FILE>){
    chomp();
    if($_=~ /^\s*<interpro id=\"(.*)\" type=\"(.*)\" short_name=\"(.*)\" protein_count/){
    #if($_=~ /^<interpro id=\"(.*)/){
    $id=$1;
    $type=$2;
    $name=$3;

    print "###############################################################\n
    ###############################################################\n
    id= $id\ttype= $type\tname= $name\n";
    }
    if($_=~/<abstract>/gi){
    $abstract_open="yes";
    }
    if($abstract_open eq "yes"){
    $abstract.="$_";
    $abstract =~s/<.+>//gi;
    $abstract =~s/&lt;p&gt;//gi;
    $abstract =~s/&lt;\/p&gt;//gi;
    $abstract =~s/\s\s+//gi;
    }

    if($_=~/<\/abstract>/gi){
    print "-----------------------------abstract\n";
    print "$abstract\n";
    $abstract_open="no";
    $abstract="";
    }

    if ($_ =~/^\s*<db_xref protein_count=\"(.*)\" db=\"(.*)\" dbkey=\"(.*)\" name=\"(.*)\" /)
    {print "-----------------------------member liste\n";
    print "prot_count= $1\tdb= $2\tdbkey= $3\tname= $4\n";
    }


    }
    close(FILE);

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Si ca peut t'aider voici ma version (on ne peux plus simple il me semble)
    (ps a adapter -> initialiser $file)

    #Parseur du fichier de structure

    #!/usr/bin/perl
    package Parser;
    use XML:arser;


    sub parse
    {
    die "Fichier xml de structure introuvable \"$file\"" unless -f $file;
    #Mise en place du parseur
    my $parser = new XML:arser(ErrorContext => 2);
    $structure = Structure->new();
    $parser->setHandlers(Start => \&start_handler,
    End => \&end_handler,
    Char => \&char_handler);
    $parser->parsefile($file);
    return $structure;
    }



    sub start_handler
    {
    #Récupération de la balise courante
    my $expat = shift; my $element = shift;
    $balise=$element;
    }

    sub char_handler
    {
    #Récupération des valeurs contenus entre les balises
    $data="";
    my ($p, $data) = @_;
    if ($data =~ /\S/)
    {
    if($balise eq "titre"){
    # Contenu de la balise se trouve donc dans $data, il n'y a plus qu'a la stocker
    }
    if($balise eq "taille_fenetre"){
    ...
    }
    if($balise eq "commande_exe"){
    ...
    }
    if($balise eq "couleur_claire"){
    ...
    }
    if($balise eq "couleur_fonce"){
    ...
    }
    if($balise eq "titre_signet"){
    ...
    }
    }
    }

    Ps: c'est du SAX (évenementiel)

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    merci, j'ai fait du sax et c bon, mais aussi avec des regex et c bon aussi.
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parser un fichier XML contenant des accents
    Par Shadew dans le forum Général Python
    Réponses: 4
    Dernier message: 17/06/2015, 18h27
  2. Parser un fichier xml en perl
    Par bana3 dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2013, 16h53
  3. Parser des fichiers XML avec boost
    Par K-you dans le forum Boost
    Réponses: 8
    Dernier message: 25/02/2010, 17h02
  4. [SAX] parser des fichiers xml en java
    Par katy.72 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 10/02/2009, 13h36
  5. parser des fichiers xml
    Par bennyben87 dans le forum Modules
    Réponses: 2
    Dernier message: 22/05/2008, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo