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

Langage Perl Discussion :

Problème de comptage de balises


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème de comptage de balises
    Bonjour,

    je souhaite compter les balises dans un texte annoté de cette façon:

    La mort du <func.ind> <kind> prince </kind> </func.ind> <pers.ind correction="Napoléon"> <name> Napol on </name> </pers.ind> a pour
    conséquence, aux terms de la loi
    d'exil, de bannir de 'A rance son second
    fils, le <func.ind correction="prince"> = <kind> rince </kind> </func.ind> <pers.ind> <name.first> Louis, </name.first> </pers.ind> héritier de son
    frère <pers.ind> <name.first> Victor, </name.first> </pers.ind> maintenant chef de la
    famille.


    Sachant que je ne veux compter que les balises du niveau supérieur, et non celles qui se trouvent déjà à l'intérieur d'une autre balise (ce qui nous en fait 5, dans l'exemple).
    Voici mon code:

    use locale;
    use strict;

    my $patternouvrant="<.*?>";
    my $patternfermant="<\/.*?>";

    my $compteurouvrant=0;
    my $compteurfermant=0;
    my $compteurentites=0;

    open(TXT,"<","toto.ne");

    while (my $ligne =<TXT>)
    {
    if($ligne=~/$patternouvrant/)
    {
    $compteurouvrant++;
    }
    if($ligne=~/$patternfermant/)
    {
    $compteurfermant++;
    }

    if ($compteurouvrant == $compteurfermant)
    {
    $compteurentites++;
    $compteurouvrant=0;
    $compteurfermant=0;
    }
    }

    print $compteurentites;
    close(TXT)

    L'idée est de compter chaque balise ouvrante d'un coté, chaque fermante d'un autre, et lorsque les 2 compteurs sont égaux (donc qu'on a parcouru tout un groupe de balises), incrémenter un 3e compteur. Seulement là, il me compte toutes les balises à chaque fois.

    Help !!
    Merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Points : 207
    Points
    207
    Par défaut
    Il y a plusieurs problèmes dans ton code.

    Je l'ai repris, et j'y ai ajouté des "print" à des endroits clés afin de mettre en évidence le problèmes.

    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
     
    use locale;
    use strict;
     
    my $patternouvrant="<.*?>";
    my $patternfermant="<\/.*?>";
     
    my $compteurouvrant=0;
    my $compteurfermant=0;
    my $compteurentites=0;
     
    open(TXT,"<","toto.ne");
     
    while (my $ligne =<TXT>)
    {
    if($ligne=~/$patternouvrant/)
    {
    $compteurouvrant++;
    print "ouvrant: $ligne\n";
    }
    if($ligne=~/$patternfermant/)
    {
    $compteurfermant++;
    print "fermant: $ligne\n";
    }
     
    if ($compteurouvrant == $compteurfermant)
    {
    print "total: ouvrant: $compteurouvrant et fermant: $compteurfermant\n";
    $compteurentites++;
    $compteurouvrant=0;
    $compteurfermant=0;
    }
    }
     
    print $compteurentites."\n";
    close(TXT)
    1) Avec ton code, si lors de la lecture d'une ligne aucun pattern ne correspond, tu aura :$compteurouvrant=0 et $compteurfermant=0, et donc tu va incrémenter $compteurentites.
    => C'est pas bon....

    2) Ton code, ne va compter que un seul pattern (ouvrant ou fermant) par ligne.

Discussions similaires

  1. [MySql] Problème de comptage
    Par Oberown dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 05h44
  2. Problème effacement d'une balise html
    Par loudv dans le forum Web
    Réponses: 1
    Dernier message: 04/12/2005, 18h51
  3. Réponses: 2
    Dernier message: 25/09/2005, 21h30
  4. Problème de fermeture de balise <tr>
    Par nuage dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/03/2004, 09h55

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