|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 511 ![]() |
Bonjour,
Je souhaiterai réaliser un script qui m'ouvre un fichier dans le quel il y aurait différente ligne et ne récupérer que les lignes qui n'ont pas les mots suivants : erreur, error... Pour cela, j'avais pensé aux programme suivant : quel est la négation pour " =~ " ? Citation:
|
|
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Jean-marie BourbonIT Security Consultant Inscription : septembre 2007 Messages : 338 ![]() |
Salut,
la négation pour ta regexp ( ne match pas ) est Cdlt. |
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 511 ![]() |
j'ai mis cela :
Citation:
Merci pour votre aide |
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 511 ![]() |
pardon , je voulais dire :
open (FIC_READ, "<$Fichier") || die "Ouverture impossible du fichier $Fichier: $!"; my @GestionLigneExclu=("erreur","error"); while ($Ligne = <FIC_READ> ) { if (grep { $Ligne !~ m/$_/g } @GestionLigneExclu) { print "traitement $Ligne \n"; } else { print "erreur $Ligne \n"; } } close (FIC_READ); |
|
|
00
|
|
|
#5 | ||
|
Membre chevronné
![]() Jean-marie BourbonIT Security Consultant Inscription : septembre 2007 Messages : 338 ![]() |
As tu essayer de printer dans ta boucle pour voir ce que ça donne comme ceci :
Code :
|
||
|
00
|
|
|
#6 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 572 ![]() |
Suppose que $Ligne contienne: "erreur toto titi", avec @GestionLigneExclu=("erreur","error");
Ton "grep { $Ligne !~ m/$_/g } @GestionLigneExclu) " va te renvoyer "error", puisque error n'est pas dans ta ligne. Du coup, en contexte scalaire, ce sera évalué à 1 (un élément retournée par le grep) et, par conséquent, le if considérera la condition comme étrant vraie.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#7 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 511 ![]() |
A partir du moment ou je mets cela dans un tableau, avec plusieurs valeurs, ça ne fonctionne pas.
La commande suivante ci-dessous fonctionne : par contre je ne peux mettre qu'une référece dans ma variable $toto. Comment pourrais je avoir plusieures référence, comme my $toto="erreur, fatal, ERROR"; Citation:
|
|
|
|
00
|
|
|
#8 | ||||
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 572 ![]() |
Si tu mets tes différents mots disgnostics d'erreur dans un tableau, par ex:
Code :
my @error_msg = qw /erreur error fatal failed coredump/; Code :
Code :
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
||||
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 511 ![]() |
en effet, ça fonctionne mieux.
Mais si dans ma variable, je fais une recherche sur des mots avec des espaces., ça ne fonctionne pas !! my @error_msg = qw /erreur error fatal failed coredump/; par exemple, je recherche "erreur du programme", je recherche la pharse entiere. merci pour votre aide |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 572 ![]() |
Si tu recherches des expression contenant plusieurs mots, il faut remplacer la syntaxe qw:
Code :
my @error_msg = qw /erreur error fatal failed coredump/; Code :
my @error_msg = ("fatal error", "erreur de lecture du fichier", "Programme arrêté par la fin du monde le 21/12/2012");
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com