OVH Cloud OVH Cloud

votre avis svp.

4 réponses
Avatar
kurtz_le_pirate
bonjour,

j'ai un fichier de log du genre :

...
[20:26:17] (Thread1)Errors encountered. Copy process aborted for
mailbox 'TEXRIEUR Alex' ('TEXRIEUR ALEX').
...
[21:43:05] (Thread1)Errors encountered. Copy process aborted for
mailbox 'SERIEN Jean' ('SERIEN JEAN').
...
[21:13:31] (Thread1)Errors encountered. Copy process aborted for
mailbox 'STIQUE Sophie' ('STIQUE SOPHIE).
...
[21:24:16] (Thread1)Errors encountered. Copy process aborted for
mailbox 'TERIEUR Alain' ('TERRIEUR ALAIN').
...

je veux récupérer les noms des personnes pour lesquels, il y a une
erreur. j'ai donc ecris ça :
# use, declaration, open....

while (<LOGFILE>) {
if (/error/io) {
if (/(')(\w+ \w+)(')/) {
print "Erreur pour $2\n";
}
}
}

ça marche bien mais je voudrais avoir votre avis sur ma méthode.
merci

4 réponses

Avatar
damien guerin
pourquoi faire ça si ne souhaite pas récupérer les guillemets ?
if (/(')(w+ w+)(')/)

Fais plutot ça :
if (/'(w+ w+)'/) {
print "Erreur pour $1n";
}

Sinon, imagine que tes personnes ont des noms composés du genre "DE
LANOUE JEAN-PAUL"???
Je pense que
if (/'(.+)'/) {
print "Erreur pour $1n";
}
Serait plus adapté à la condition seulement où il n'y ait que des
personnes entre les guillemets...
Si les messages que tu analyses sont toujours comme ton copier-coller,
tu devrais être plus strict dans ton analyse :

while (<LOGFILE>) {
if (/errors encountered/i) {
if (/mailbox '(.+)'/i) {
print "Erreur pour $1n";
}
}
}

Voilà mon avis.
Avatar
Laurent Wacrenier
kurtz_le_pirate écrit:
if (/error/io) {
if (/(')(w+ w+)(')/) {
print "Erreur pour $2n";
}
}

ça marche bien mais je voudrais avoir votre avis sur ma méthode.
merci


Ça ne marche pas pour les noms composés
Une expressions comme ça :

if (/error.*'(.*?)'/i) { ... }

prendrait tout ce qu'il y a entre les permiers ''
et ne nessessite qu'un seul test.

Avatar
kurtz_le_pirate
"damien guerin" a écrit dans le message de
news:
pourquoi faire ça si ne souhaite pas récupérer les guillemets ?
if (/(')(w+ w+)(')/)



justement, c'était mon problème...

Fais plutot ça :
if (/'(w+ w+)'/) {
print "Erreur pour $1n";
}



c'est effectivement plus simple

Sinon, imagine que tes personnes ont des noms composés du genre "DE
LANOUE JEAN-PAUL"???



oui bien vu !

Je pense que
if (/'(.+)'/) {
print "Erreur pour $1n";
}
Serait plus adapté à la condition seulement où il n'y ait que des
personnes entre les guillemets...
Si les messages que tu analyses sont toujours comme ton
copier-coller,
tu devrais être plus strict dans ton analyse :

while (<LOGFILE>) {
if (/errors encountered/i) {
if (/mailbox '(.+)'/i) {
print "Erreur pour $1n";
}
}
}



c'est effectivement plus rigoureux


Voilà mon avis.
merci beaucoup




Avatar
kurtz_le_pirate
"Laurent Wacrenier" <lwa@ teaser . fr> a écrit dans le message de
news:
kurtz_le_pirate écrit:
if (/error/io) {
if (/(')(w+ w+)(')/) {
print "Erreur pour $2n";
}
}

ça marche bien mais je voudrais avoir votre avis sur ma méthode.
merci


Ça ne marche pas pour les noms composés


bien vu aussi.

Une expressions comme ça :
if (/error.*'(.*?)'/i) { ... }

prendrait tout ce qu'il y a entre les permiers ''
et ne nessessite qu'un seul test.


en effet, plus compact.

merci