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

Programmation et administration système Perl Discussion :

balise XML et regexp


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut balise XML et regexp
    Bonjour à tous,

    Ne pouvant utiliser les modules de parsing XML, je suis obligé de m'attaquer à un fichier xml avec les regexp

    Je traite une chaine renvoyée par un "find . -type f| xargs grep <chaine>" (unix) qui est de la forme:

    nom_du_fichier_trouve1.xml:<CM><CA>86767</CA>564654<LV>54654<I>897987897<Q>987</Q><Q>48</Q></I></LV></CM>
    nom_du_fichier_trouve2.xml:<CM><CA>7786786</CA>86768<LV>5656<I>5656<Q>96</Q><Q>65</Q></I></LV><LV>656568<I>5656<Q>96</Q><Q>65</Q></I></LV></CA></CM>

    Je désire retourner à l’écran les occurrences de <I>..</I> de la forme
    <I>89;79;87897<Q>987</Q><Q>48</Q></I>
    <I>56;5;6<Q>96</Q><Q>65</Q></I>
    <I>56;5;6<Q>96</Q><Q>65</Q></I>


    J'ai un code qui fonctionne mais qui ne fait pas la distinction du nombre d'occurence de <I>..</I> et qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ( /(\<I\>.*;\<\/I\>)/msg ) {
    	print $1; 
    };
    Pourriez vous m'aider ?

  2. #2
    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
    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
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    my @chaine = (
    'nom_du_fichier_trouve1.xml:<CM><CA>86767</CA>564654<LV>54654<I>897987897<Q>987</Q><Q>48</Q></I></LV></CM>',
    'nom_du_fichier_trouve2.xml:<CM><CA>7786786</CA>86768<LV>5656<I>5656<Q>96</Q><Q>65</Q></I></LV><LV>656568<I>5656<Q>96</Q><Q>65</Q></I></LV></CA></CM>',
    );
     
    foreach my $data ( @chaine ) {
      my @motif = $data =~ m{(<i>.+?</i>)}msgi;
      print "==========\n";
      print "CHAINE : $data\n";
      print "Motif : @motif\n";
      print "==========\n";  
    }
    ou si ta chaine contient plusieurs lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @motif = $chaine =~ m{(<i>.+?</i>)}msgi;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par djibril Voir le message
    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
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    my @chaine = (
    'nom_du_fichier_trouve1.xml:<CM><CA>86767</CA>564654<LV>54654<I>897987897<Q>987</Q><Q>48</Q></I></LV></CM>',
    'nom_du_fichier_trouve2.xml:<CM><CA>7786786</CA>86768<LV>5656<I>5656<Q>96</Q><Q>65</Q></I></LV><LV>656568<I>5656<Q>96</Q><Q>65</Q></I></LV></CA></CM>',
    );
     
    foreach my $data ( @chaine ) {
      my @motif = $data =~ m{(<i>.+?</i>)}msgi;
      print "==========\n";
      print "CHAINE : $data\n";
      print "Motif : @motif\n";
      print "==========\n";  
    }
    ou si ta chaine contient plusieurs lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @motif = $chaine =~ m{(<i>.+?</i>)}msgi;
    Ça fonctionne
    Merci djibril

  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
    Petit tag résolu !

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

Discussions similaires

  1. [XML][XSL]probleme html dans balise xml
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/12/2005, 11h42
  2. [XML] string et balise XML <??>
    Par Royd938 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/10/2005, 16h51
  3. [Configuration] Confusion de balises XML / PHP
    Par teto dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 10/09/2005, 13h40
  4. [JDOM] données un attribut à une balise xml
    Par noobiewan kenobi dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 09/07/2004, 15h54
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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