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 :

récuperation en perl


Sujet :

Langage Perl

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Par défaut récuperation en perl
    bonjour
    merci d'avance de porter votre aide à mon travail
    j'ai un problème que je ne sais pas comment le résoudre

    mon test source est:
    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
     
    SRFIL,DBG=H'F':DD= 07-5-14;
     
       CMD SRFIL  00002   07-05-15 09-30-53
       INP SRFIL  00002   07-05-15 09-30-53
     
     
     
       RES SRFIL  00002   07-05-15 09-30-53
        CEN=1/07-05-15/09 H 30 MN 53/LISTAGE SURETE DE FONCTIONNEMENT
        TRAITEMENT TDRHM0 ACC
        07-05-14/13 H 22 MN 29 EVT=02 :DEBUT INIT.
          /AM = SMB6 ETAT=BLOS AF=PUPE1
          / 0202 0705 1413 2229 0485 0152 0000 0000 0000 0000 0000 0000
          / 12AE 1100 0004 8512 0000 0000 0000 0000 0000 0000 0000 0000
          / 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 8512
          / 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
          / 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
          / 0000 0000 0000 0000 0000 0000 00
     
    	07-05-14/23 H 10 MN 46 EVT=03 :FIN   INIT.
          /AM = SMB7 ETAT=ES   
          / 0203 0705 1423 1046 0486 010A 0109 017D 0151 0000 0000 0000
          / 11AE 1100 0004 8611 0001 0A01 0001 0901 0001 7D01 0001 5101
          / 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0004 8512	  
          / 8000 0010 0000 0010 0000 0010 0000 0000 0000 0000 00
     
        07-05-14/23 H 10 MN 46 EVT=03 :FIN   INIT.
          /AM = SMB7 ETAT=ES   AF=TR2+MQ2+GX2+PCB
          / 0203 0705 1423 1046 0486 010A 0109 017D 0151 0000 0000 0000
          / 11AE 1100 0004 8611 0001 0A01 0001 0901 0001 7D01 0001 5101
          / 8000 0010 0000 0010 0000 0010 0000 0000 0000 0000 00
     
        TRAITEMENT TDRHM0 EXC
     
    COMMANDE EXECUTEE
     
       RPT SRFIL  00002   07-05-15 09-30-53
           EXC
     
     
    ===============================================================================
     
    =========================== FIN MACRO =================================
    voila mon code
    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
     
    #!/usr/bin/perl
    use strict; use warnings;
     
    my $basedir = 'C:/Documents and Settings/farid/Bureau/9cegetel/traitement';
     
    open my($src),'<', "$basedir/testsrc.txt"
       or die "E/S : $!\n";
     
    open my($out), '>>', "$basedir/rslt.txt"
       or die "E/S : $!\n";
     
    # liste des commandes
    my @commands = qw(
     
      ALAIL
      ANOIL
      NSSIN
      SRFIL
      ESMIN
      GLRIL
      DMPIL
     
    );
     
    # construction de la regex pour reconnaître l'une de ces commandes
    # en début de ligne (éventuellement après quelques espaces/tabulations)
    # on capture la commande utilisée
    # aspect final de la regex : m/^\s*(SRFIL|ESMIN|...|DMPIL)/
    my $rx_string = join '|', map { quotemeta $_ } @commands;
    my $rx_commands = qr/^\s*($rx_string)/;
     
     
    # variable d'état pour savoir si l'on se trouve dans un paragraphe
    # qu'on veut imprimer ($in == 2), après une commande ($in == 1),
    # ou en dehors de tout cela ($in == 0)
    my $in = 0;
    while(<$src>){
        if( not $in and my ($cmd) = (m/$rx_commands/) ) {
            print $out "$cmd:\n\n";
            $in = 1;
        }
        elsif( $in == 1 and m/^\s*TRAITEMENT ...... ACC/ ) {
            $in = 2;
        }
    # anaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa pour SRFIl
    	while($in == 2){
    		if(/(d{2}-d{2}-d{2})\/\(d{2}\ H \d{2}\ MN \d{2}) (EVT=.*)$/){
    			my $date = $1;
    			my $heure = $2;
    			my $evt = $3;
    		}
     
    		elsif(/(AM =\w+) (ETAT=\w+) (AF=.*)$/){
    			my $am = $1;
    			my $etat = $2;
    			my $af = $3;
    		}
     
    		elsif(while(/(\/\ .*)$/)){
    			my $msg = $1;
    		}
    	print $date, $heure, $evt, $am, $etat, $af, $msg;
    	}
    ###  machi anaaaaaaaaaaaaaaaaaaaaaaaa	
        elsif( $in == 2 and m/^\s*TRAITEMENT ...... EXC/ ) {
            $in = 0;
           # print $out "\n\n";
        }
        elsif( $in == 2 ) {
            print $out $_;
        }
    }   
     
    close $src;
    close $out;
    je voudrai récupérer à chaque fois les élèment de chaque message

    et voila ce qu'il me donne comme faute que je ne comprend pas
    il me donne la faute suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Unmatched ) in regex; marked by <-- here in m/(d{2}-d{2}-d{2})\ H \d{2}\MN \d{2}) <-- HERE (EVT=.*)$/ at line 47
    Merci beaucoup d'avance de votre aide, j'en ai vraiment besoin

  2. #2
    Expert confirmé
    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
    Par défaut
    Et bien c'est exactement comme dit dans l'erreur, la dernière parenthèse fermante de ta regex n'a pas de parenthèse ouvrante associée, visiblement tu as oublié de l'ouvrir.

    --
    Jedaï

Discussions similaires

  1. Récuperer Variable FLEX depuis script PERL
    Par ZiliCa dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 22/03/2009, 16h53
  2. Perl Et Récuperation Résultat Sql
    Par GOTRUNK dans le forum SGBD
    Réponses: 4
    Dernier message: 09/06/2006, 11h36
  3. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  4. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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