Bonjour,
J'ai un fichier texte qui contient des log.
Ces log sont ordonnés par bloc avec un pattern de départ et un caractère de fin. Ci dessous un exemple:
j'ai réalisé ce programme qui dans un premier temps extrait le bloc qui commence par le pattern "SEV=" et se termine par un ";"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SEV="CRITICAL":EVTTIME="2011/02/23 04:34:35":FRDNAME="H37":EVTTYPE="EQUIPMENT":PBCAUSE="Ouput Device Error - X733":RSVSTS="NRSV":CLRSTS="CLR":ACKSTS="ACK":ARCHIVETIME="2011/02/23 04:45:05":ARCHIVECAUSE="Ack And Clear":ADDTEXT="$$$ *N=3479/STA/11-02-23/04-34-35/H37 /REPORT NOT AVAILABLE/ +/H37 /R=01003/HLT1 / +/S/D/B A/ES_ESRE/ "; SEV="CRITICAL":EVTTIME="2011/02/23 04:31:22":FRDNAME="H37":EVTTYPE="EQUIPMENT":PBCAUSE="Ouput Device Error - X733":RSVSTS="NRSV":CLRSTS="CLR":ACKSTS="ACK":ARCHIVETIME="2011/02/23 04:45:05":ARCHIVECAUSE="Ack And Clear":ADDTEXT="$$$ *N=3478/STA/11-02-23/04-31-22/H37 /REPORT NOT AVAILABLE/ +/H37 /R=01003/HLT1 / +/S/D/B A/ES_ESRE/ ";
ce bloc est donc une chaîne mais qui contient des retours chariot que je souhaite garder.
ensuite j'ai fait une fonction qui doit extraire ce qui est contenu dans:
ADDTEXT="..........":
mais la partie
ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ($alarme_texte) = $alarme =~ /ADDTEXT=\"(.*)\"/;
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 #!/usr/bin/perl use strict; use warnings; my $log = $ARGV[0]; # Définition des variables my $ligne; # La ligne courante du fichier en lecture my $entree; # String contenant toutes les infos sur les alarmes my $continue = 0; my $pattern_begin = "^SEV="; my $pattern_fin = ";\$"; # ouverture du fichier en lecture open(FILE, "<$log") or die $!; # On boucle sur tout le fichier (tant qu'il y a une ligne à lire...) while ($ligne = <FILE>) { # Si la ligne commande par IMSI et que la variable start = 1 if ( $ligne =~ m/$pattern_begin/ ) { $entree = $ligne; $continue = 1; } elsif ( $continue = 1 && $ligne !~ m/$pattern_fin/ ) { $entree = $entree.$ligne; } elsif ( $ligne =~ m/$pattern_fin/ ) { $entree = $entree.$ligne; $continue = 0; # Affiche le bloc extrait print $entree."\n\n"; #affiche juste le texte de l'alarme &print_alarme_texte($entree); } } sub print_alarme_texte { my $alarme = $_[0]; my $alarme_texte = ""; ($alarme_texte) = $alarme =~ /ADDTEXT=\"(.*)\"/; print $alarme_texte."\n\n"; }
Partager