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 :

[REGEX] Souci de regex


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [REGEX] Souci de regex
    Bonjour à tous,

    j'ai un petit souci avec une regex.

    J'ai un fichier qui comprend des blocs de données.

    Je récupère toutes les données du fichier dans un tableau, puis dans une variable avec join("",<fic>)

    De là, j'utilise une regex (merci djibril pour l'explication il y a quelques temps afin de dissocier mes blocs de commandes dans un tableau.
    Je fais ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          open&#40;fic,$RepEnvoi.$FileToSend&#41; or die "Grave erreur. Ouverture $RepEnvoi$FileToSend impossible $!\n";
          $my_lines=join&#40;"",<fic>&#41;;
          close&#40;fic&#41;;
          my @BLOCS=$my_lines=~/^&#40;EDI_DC40.+?EDI_DC40.+?$&#41;/msg;
    Jusque là, pas de problème ...

    Mais ensuite, pour chacun des éléments du tableau @BLOCS, je veux faire une autre regexp qui doit vérifier les règles suivantes:
    - la ligne commence par $Segment
    - puis, il y a 40 (et 40 uniquement) espaces
    - puis, il y a 15 fois n'importe quel caractère
    - puis, il y a $Segment_qualifier

    Si le motif est trouvé, on prend les 35 premiers caractères du sous ensemble après le motif ( $' )
    J'ai donc fait la regexp suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for&#40;my $i=0;$i<=$#BLOCS;$i++&#41;
    &#123;
     
         if&#40;$BLOCS&#91;$i&#93;=~/^&#40;$Segment&#41;\s&#123;40&#125;.&#123;15&#125;$Segment_qualifier/mg&#41;;
         &#123;
               print "SS ensemble après&#58; ".substr&#40;$',0,35&#41;."\n";
         &#125;
    &#125;
    Je traite $BLOCS&#91;$i&#93; ainsi&#58;
    - m &#58; pour prendre la chaine comme plusieurs lignes
    - g &#58; recherche plusieurs fois &#40;même si c'est sur que on trouvera la ligne une et une seule fois
    Donc, il y a visiblement un gros problème dans ma 2nde regexp.
    Je pense pas que je n'applique pas les règles d'écriture correctement.

    Pouvez vous me filer un coups de pouce la dessus ??
    Merci beaucoup !!!
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Tu es sur d'avoir compter les espaces dans les 15 caractères séparant les espaces et $Segment_qualifier ? Je ne vois pas de problèmes dans ta regex...

    Au puire, montre nous un exemple d'expressions à matcher, ça peut nous aider...
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ba en fait, je croyais avoir une erreur dans ma regex car le lancement du programme me ressort l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    syntax error at C&#58;/Perl/lib/TX2/control.pm line 109, near "&#41;;"
    juste à cette ligne là !!!!
    tout le monde est d'accord pour critiquer la pensée unique

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Et voilà la ligne que laquelle s'exerce la seconde regexp:
    E2EDK02 0000110000000100116-376133-2P3EPNJ 20060222
    Avec la regexp (un peu modifiée car l'autre était un exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $BLOCS&#91;$i&#93;=~/^&#40;$Segment&#41;&#40;\s&#41;&#123;42&#125;.&#123;11&#125;$Segment_qualifier/msg
    avec $Segment = "E2EDK02"
    et $Segment_qualifier = "001"

    Le but étant de récupérer "00116-376133-2P3EPNJ "
    (substr($',0,35))
    tout le monde est d'accord pour critiquer la pensée unique

  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
    regarde très attentivement ta ligne (surtout à la fin), et tu vas trouver l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if&#40;$BLOCS&#91;$i&#93;=~/^&#40;$Segment&#41;\s&#123;40&#125;.&#123;15&#125;$Segment_qualifier/mg&#41;;
    Parfois on cherche des choses compliqués, alors que c'est juste une faute de frappe...

    --
    Jedaï

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Aïe Aïe Aïe, j'avais pas vu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if&#40;$BLOCS&#91;$i&#93;=~/^&#40;$Segment&#41;&#40;\s&#41;&#123;40&#125;.&#123;15&#125;$Segment_qualifier/mg&#41;
    !!!!!!

    J'ai envie de me jeter par la denêtre tiens !!!

    Merci Jedaï
    tout le monde est d'accord pour critiquer la pensée unique

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/03/2010, 17h58
  2. Souci de Regex
    Par ApocalypseDuck dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2009, 17h45
  3. soucis de regex
    Par Miaou le chat thon dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/12/2008, 16h32
  4. [RegEx] Souci des regex pour les puces donc erreurs W3C
    Par retour dans le forum Langage
    Réponses: 10
    Dernier message: 04/10/2008, 16h09
  5. Soucis avec regex.replace
    Par elric47 dans le forum ASP
    Réponses: 1
    Dernier message: 30/04/2008, 00h33

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