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:
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 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 =================================
je voudrai récupérer à chaque fois les élèment de chaque 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
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;
et voila ce qu'il me donne comme faute que je ne comprend pas
il me donne la faute suivante
Merci beaucoup d'avance de votre aide, j'en ai vraiment besoin
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
Partager