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 :

[langage] expression reguliere motif répétitif dans 1 pattern


Sujet :

Langage Perl

  1. #1
    Membre actif
    Inscrit en
    janvier 2003
    Messages
    585
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 585
    Points : 235
    Points
    235
    Par défaut [langage] expression reguliere motif répétitif dans 1 pattern
    Bonjour,
    Je commence en PERL
    je suis en train d'analyser un fichier que
    je lis ligne par ligne afin de vérifier un pattern
    la fin de ce fichier est constitué d'une répétition
    d'un même motif
    3 chiffres puis 6 lettres ou chiffres ou espaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0-9]{3}[0-9A-Z\s]{6}
    et j'aimerais analayser ce motif de manière répétitive
    comment faire.
    Mes essais pour mettre tout entre parenthèse ont été infructueux.

    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    février 2003
    Messages
    1 473
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 473
    Points : 1 643
    Points
    1 643
    Par défaut
    Tout dépend ce que tu entends par "analyser ce motif de manière répétitive" ???

    Dans mon boulot, il m'arrive régulièrement de bosser sur des fichiers de ce genre (extraction de données d'une grosse BDD).

    Ci-dessous, un exemple qui ne récupère que la ou les ligne(s) qui t'interressent + en isolant d'un côté les 3 chiffres et de l'autre la série de lettres/chiffres/espaces :

    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
    use strict;
    my $Fichier = "toto.log";
    my $Chaine1;  # isole les 3 chiffres
    my $Chaine2;  # isole le reste
     
    open(LOG, "$Fichier") or die("oupsss, pb avec $Fichier : $!\n");
    while&#40;<LOG>&#41; &#123;
        chomp&#40;&#41;;
        if &#40;/^&#40;&#91;0-9&#93;&#123;3&#125;&#41;&#40;&#91;0-9A-Z\s&#93;&#123;6&#125;&#41;$/&#41; &#123;
            $Chaine1 = $1;
            $Chaine2 = $2;
            print "chaines trouvees a la ligne $. &#58; $Chaine1, $Chaine2\n";
        &#125;
    &#125;
    close&#40;LOG&#41;;

  3. #3
    Membre actif
    Inscrit en
    janvier 2003
    Messages
    585
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 585
    Points : 235
    Points
    235
    Par défaut
    Le probleme c'est que ce motif se trouve dans cette ligne
    un certain nombre de fois.
    Du genre
    mon motif = suite de 9 caractres avec espaces lettres et chiffres

    "debut de ma ligne ... 007x75 008U75 017DBLCAB018MB ..."
    "ligne suivante...

    voila

  4. #4
    Membre expérimenté
    Inscrit en
    février 2003
    Messages
    1 473
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 473
    Points : 1 643
    Points
    1 643
    Par défaut
    Ah ok, je comprend mieux ! En reprenant mon code initial :

    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
    use strict; 
    my $Fichier = "toto.log"; 
    my $Chaine1;  # isole les 3 chiffres 
    my $Chaine2;  # isole le reste 
     
    open&#40;LOG, "$Fichier"&#41; or die&#40;"oupsss, pb avec $Fichier &#58; $!\n"&#41;; 
    while&#40;<LOG>&#41; &#123; 
        chomp&#40;&#41;; 
        if &#40;/&#40;&#91;0-9&#93;&#123;3&#125;&#41;&#40;&#91;0-9A-Z\s&#93;&#123;6&#125;&#41;/&#41; &#123; 
            while&#40;/^&#40;&#91;0-9&#93;&#123;3&#125;&#41;&#40;&#91;0-9A-Z\s&#93;&#123;6&#125;&#41;&#40;.+&#41;/&#41; &#123;
                $Chaine1 = $1; 
                $Chaine2 = $2; 
                print "chaines trouvees a la ligne $. &#58; $Chaine1, $Chaine2\n"; 
                $_ = $3;
            &#125;
        &#125; 
    &#125; 
    close&#40;LOG&#41;;

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    On peut aussi utiliser le modificateur /g pour l'expression rationnelle :
    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
     
    use strict; 
    my $Fichier = "toto.log"; 
     
    open&#40;LOG, "$Fichier"&#41; or die&#40;"oupsss, pb avec $Fichier &#58; $!\n"&#41;;
     
    while&#40;<LOG>&#41; 
    &#123; 
        chomp&#40;&#41;;
        while&#40;/\G&#40;&#91;0-9&#93;&#123;3&#125;&#41;&#40;&#91;0-9A-Z\s&#93;&#123;6&#125;&#41;/g&#41; 
        &#123; 
            print "chaines trouvees a la ligne $. &#58; $1, $2\n"; 
        &#125; 
    &#125; 
     
    close&#40;LOG&#41;;
    Mais on ne sait pas vraiment ce que tu veux faire avec ces chiffres et ces lettres donc si tu n'as pas besoin de les réutiliser, la méthode serait différente.

  6. #6
    Membre actif
    Inscrit en
    janvier 2003
    Messages
    585
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 585
    Points : 235
    Points
    235
    Par défaut
    Merci bien,
    ca marche, j'ai l'impression que je vais m'ammuser avec PERL
    (ca va plus vite a programmer que du C)
    Du coup cette question y a t'il des convertisseurs qui permettent
    de transformer le code PERL en C ?

    Ca serait cool

  7. #7
    Membre expérimenté
    Inscrit en
    février 2003
    Messages
    1 473
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 473
    Points : 1 643
    Points
    1 643
    Par défaut
    Citation Envoyé par comme de bien entendu
    Merci bien,
    ca marche, j'ai l'impression que je vais m'ammuser avec PERL
    (ca va plus vite a programmer que du C)
    bon, ben voilà déjà une bonne chose de faite

    Citation Envoyé par comme de bien entendu
    Du coup cette question y a t'il des convertisseurs qui permettent de transformer le code PERL en C ?

    Ca serait cool
    heueueuheu
    tu peux embarquer du code Perl dans un source C mais c'est chaud à faire et je vois pas trop l'intérêt. Mais convertir du .pl en .c, oulah !! à mon avis, ça n'est pas (encore) possible

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Vi, ça existe, mais c'est assez expérimental, le code est sans doute illisible, etc...
    Si tu veux néanmoins les utiliser, il s'agit de B::C et B::CC (le deuxième étant plus lisible et sans doute meilleur mais encore plus expérimental et encore moins stable ).
    A priori, mais je ne l'ai jamais utilisé, tu fais ainsi pour l'exécuter :
    % perl -MO=CC tonScript > Traduc.c
    Je crois que ça devrait marcher (pas sûr du tout )

    Edit : Je crois que "perlcc" est un frontal qui te facilitera les choses (surement que ma ligne de commande ne doit pas marcher, il doit falloir mettre des options avant )

  9. #9
    Membre expérimenté
    Inscrit en
    février 2003
    Messages
    1 473
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 473
    Points : 1 643
    Points
    1 643
    Par défaut
    Jedai, essaye juste pour voir avec un script simplissime genre -> print "hello, world"

    tu verras la tonne de lignes que ça va te générer dans le .c et le pire, c'est que j'ai jamais réussi à le compiler

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    J'ai jamais essayé et le problème le plus évident c'est que les bibliothèque Perl doivent être liées statiquement (pour que le programme soit portable) donc le binaire (si jamais on arrive à compiler ) doit être fort volumineux...

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Vi, je viens d'essayer et c'est pas très convaincant... Après tout les auteurs de "Programmation en Perl" écrive bien au moins 6 fois en 2 pages que ce sont des fonctionnalités expérimentales .

    Décidemment j'y arrive pas non plus

  12. #12
    Membre expérimenté
    Inscrit en
    février 2003
    Messages
    1 473
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 473
    Points : 1 643
    Points
    1 643
    Par défaut
    Citation Envoyé par Jedai
    Décidemment j'y arrive pas non plus
    Je crois que le mieux est de continuer à bosser en Perl ... Et y rester !


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

Discussions similaires

  1. [langage] Expression régulière
    Par GMI3 dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2004, 15h15
  2. Réponses: 2
    Dernier message: 22/12/2003, 16h23
  3. [langage] [expression reguliere] : syntaxe
    Par arcane dans le forum Langage
    Réponses: 8
    Dernier message: 25/09/2003, 14h03
  4. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 15h24
  5. Réponses: 2
    Dernier message: 16/06/2003, 16h15

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