encore une question : le script ci-dessous permet d'extraire les
erreurs d'un fichier de log.
l'erreur est sur 3 lignes. l'erreur est signalée par la présence du
mot 'error' dans la ligne 2.
il faut détecter l'erreur et affiché la ligne avant et après. pour
celle d'avant, j'ai reussi.
pour celle d'après... je sèche.
---------------------------------------------------------------------------------------------------------------
#!/usr/bin/perl -w
use Strict;
my $fileName = "ExMerge.log";
open (LOGFILE,"<",$fileName) or die "\nOuverture de $fileName
impossible !\nErreur : $!\n";
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jul
kurtz_le_pirate a formulé la demande :
bonjour,
encore une question : le script ci-dessous permet d'extraire les erreurs d'un fichier de log. l'erreur est sur 3 lignes. l'erreur est signalée par la présence du mot 'error' dans la ligne 2. il faut détecter l'erreur et affiché la ligne avant et après. pour celle d'avant, j'ai reussi. pour celle d'après... je sèche.
$nextline = <LOGFILE> ?
-- Jul... réapparru comme par enchantement
kurtz_le_pirate a formulé la demande :
bonjour,
encore une question : le script ci-dessous permet d'extraire les
erreurs d'un fichier de log.
l'erreur est sur 3 lignes. l'erreur est signalée par la présence du
mot 'error' dans la ligne 2.
il faut détecter l'erreur et affiché la ligne avant et après. pour
celle d'avant, j'ai reussi.
pour celle d'après... je sèche.
encore une question : le script ci-dessous permet d'extraire les erreurs d'un fichier de log. l'erreur est sur 3 lignes. l'erreur est signalée par la présence du mot 'error' dans la ligne 2. il faut détecter l'erreur et affiché la ligne avant et après. pour celle d'avant, j'ai reussi. pour celle d'après... je sèche.
$nextline = <LOGFILE> ?
-- Jul... réapparru comme par enchantement
kurtz_le_pirate
"Jul" a écrit dans le message de news:
: kurtz_le_pirate a formulé la demande : : > bonjour, : > : > encore une question : le script ci-dessous permet d'extraire les : > erreurs d'un fichier de log. : > l'erreur est sur 3 lignes. l'erreur est signalée par la présence du : > mot 'error' dans la ligne 2. : > il faut détecter l'erreur et affiché la ligne avant et après. pour : > celle d'avant, j'ai reussi. : > pour celle d'après... je sèche. : : $nextline = <LOGFILE> ? : : -- : Jul... réapparru comme par enchantement
trop simple !!!!! merci pour ta ré apparrition Jul
"Jul" <julien@mesnews> a écrit dans le message de news:
mn.0bbf7d586fd4b749.28905@mesnews...
: kurtz_le_pirate a formulé la demande :
: > bonjour,
: >
: > encore une question : le script ci-dessous permet d'extraire les
: > erreurs d'un fichier de log.
: > l'erreur est sur 3 lignes. l'erreur est signalée par la présence
du
: > mot 'error' dans la ligne 2.
: > il faut détecter l'erreur et affiché la ligne avant et après. pour
: > celle d'avant, j'ai reussi.
: > pour celle d'après... je sèche.
:
: $nextline = <LOGFILE> ?
:
: --
: Jul... réapparru comme par enchantement
trop simple !!!!! merci pour ta ré apparrition Jul
: kurtz_le_pirate a formulé la demande : : > bonjour, : > : > encore une question : le script ci-dessous permet d'extraire les : > erreurs d'un fichier de log. : > l'erreur est sur 3 lignes. l'erreur est signalée par la présence du : > mot 'error' dans la ligne 2. : > il faut détecter l'erreur et affiché la ligne avant et après. pour : > celle d'avant, j'ai reussi. : > pour celle d'après... je sèche. : : $nextline = <LOGFILE> ? : : -- : Jul... réapparru comme par enchantement
trop simple !!!!! merci pour ta ré apparrition Jul
Klaus
"kurtz_le_pirate" wrote in message news:42ee208a$0$27329$
bonjour,
encore une question : le script ci-dessous permet d'extraire les erreurs d'un fichier de log. l'erreur est sur 3 lignes. l'erreur est signalée par la présence du mot 'error' dans la ligne 2. il faut détecter l'erreur et affiché la ligne avant et après. pour celle d'avant, j'ai reussi. pour celle d'après... je sèche.
D'abort quelques corrections "standard" dans le programme:
il faut respecter les minuscules, sinon le strict ne fonctionne pas et aucune erreur de syntaxe n'est signalé, comme par exemple le "L" en majuscules dans "$nextLine = ..." avec le "l" en minuscules dans "my $nextline".
my $fileName = "ExMerge.log"; open (LOGFILE,"<",$fileName) or die "nOuverture de $fileName impossible !nErreur : $!n";
my $currentLine; my $previousline; my $nextline;
while ($currentLine=<LOGFILE>) { ^^^^^^^^^^^^^^
while (defined($currentLine=<LOGFILE>)) {
Il faut ajouter la fonction defined(...) comme ci-dessous, sinon la boucle s'arrête sur une simple ligne vide ou même sur la chiffre "0". Une autre solution serait d'utiliser la construction standard "while (<LOGFILE>) { $currentLine= $_; ..." --> cette construction fait le contrôle "defined(...)" automatiquement.
Pour supprimer toute fin de ligne correspondant à la valeur courante de $/ ("n"), il vaut mieux utiliser la fonction "chomp", et non pas "chop". --> "chomp" respecte $/, mais "chop" ne le respecte pas. En plus, il vaut mieux placer la fonction "chomp" au debut dans la boucle avec $currentLine comme paramètre, juste derrière la lecture de $currentLine (et non pas à la fin avec $previousline comme paramètre).
$nextline = ... Erreur de syntaxe: il faut mettre le "L" dans "$nextLine" en minuscules. (l'expression "... = la_prochaine_ligne_dans_le_fichier" est également une erreur de syntaxe, mais voir ma proposition ci-dessous pour la remplacer)
Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la gestion des lignes ($currentLine, $previousline et $nextline) dans une nouvelle fonction "lecture()": =========================== use strict; use warnings;
my $fileName = 'ExMerge.log'; open (LOGFILE,'<',$fileName) or die "Ouverture de $fileName impossible! - Erreur: $!";
my $currentLine = ''; my $previousline = ''; my $nextline = '';
while (lecture()) { if ($currentLine =~ m/error/i) { print "n1:$previouslinen"; print "2:$currentLinen"; print "3:$nextlinen"; } }
close LOGFILE;
sub lecture { $previousline = $currentLine; $currentLine = $nextline; if (defined($nextline = <LOGFILE>)) { chomp($nextline) } return defined($currentLine); } =========================== avec le fichier 'ExMerge.log': ********************************* test01 test02 test03 Error xxx test04 test05 test06 test07 test08 Error xxx test09 test10 *********************************
"kurtz_le_pirate" <kurtzlepirate@yahoo.fr> wrote in message
news:42ee208a$0$27329$626a14ce@news.free.fr...
bonjour,
encore une question : le script ci-dessous permet d'extraire les
erreurs d'un fichier de log.
l'erreur est sur 3 lignes. l'erreur est signalée par la présence du
mot 'error' dans la ligne 2.
il faut détecter l'erreur et affiché la ligne avant et après. pour
celle d'avant, j'ai reussi.
pour celle d'après... je sèche.
D'abort quelques corrections "standard" dans le programme:
il faut respecter les minuscules, sinon le strict ne fonctionne pas et
aucune erreur de syntaxe n'est signalé, comme par exemple le "L" en
majuscules dans "$nextLine = ..." avec le "l" en minuscules dans "my
$nextline".
my $fileName = "ExMerge.log";
open (LOGFILE,"<",$fileName) or die "nOuverture de $fileName
impossible !nErreur : $!n";
my $currentLine;
my $previousline;
my $nextline;
while ($currentLine=<LOGFILE>) {
^^^^^^^^^^^^^^
while (defined($currentLine=<LOGFILE>)) {
Il faut ajouter la fonction defined(...) comme ci-dessous, sinon la boucle
s'arrête sur une simple ligne vide ou même sur la chiffre "0". Une autre
solution serait d'utiliser la construction standard "while (<LOGFILE>) {
$currentLine= $_; ..." --> cette construction fait le contrôle
"defined(...)" automatiquement.
Pour supprimer toute fin de ligne correspondant à la valeur courante de $/
("n"), il vaut mieux utiliser la fonction "chomp", et non pas "chop". -->
"chomp" respecte $/, mais "chop" ne le respecte pas. En plus, il vaut mieux
placer la fonction "chomp" au debut dans la boucle avec $currentLine comme
paramètre, juste derrière la lecture de $currentLine (et non pas à la fin
avec $previousline comme paramètre).
$nextline = ...
Erreur de syntaxe: il faut mettre le "L" dans "$nextLine" en minuscules.
(l'expression "... = la_prochaine_ligne_dans_le_fichier" est également une
erreur de syntaxe, mais voir ma proposition ci-dessous pour la remplacer)
Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la gestion
des lignes ($currentLine, $previousline et $nextline) dans une nouvelle
fonction "lecture()":
=========================== use strict;
use warnings;
my $fileName = 'ExMerge.log';
open (LOGFILE,'<',$fileName) or die "Ouverture de $fileName impossible! -
Erreur: $!";
my $currentLine = '';
my $previousline = '';
my $nextline = '';
while (lecture()) {
if ($currentLine =~ m/error/i) {
print "n1:$previouslinen";
print "2:$currentLinen";
print "3:$nextlinen";
}
}
close LOGFILE;
sub lecture {
$previousline = $currentLine;
$currentLine = $nextline;
if (defined($nextline = <LOGFILE>)) { chomp($nextline) }
return defined($currentLine);
}
===========================
avec le fichier 'ExMerge.log':
*********************************
test01
test02
test03 Error xxx
test04
test05
test06
test07
test08 Error xxx
test09
test10
*********************************
"kurtz_le_pirate" wrote in message news:42ee208a$0$27329$
bonjour,
encore une question : le script ci-dessous permet d'extraire les erreurs d'un fichier de log. l'erreur est sur 3 lignes. l'erreur est signalée par la présence du mot 'error' dans la ligne 2. il faut détecter l'erreur et affiché la ligne avant et après. pour celle d'avant, j'ai reussi. pour celle d'après... je sèche.
D'abort quelques corrections "standard" dans le programme:
il faut respecter les minuscules, sinon le strict ne fonctionne pas et aucune erreur de syntaxe n'est signalé, comme par exemple le "L" en majuscules dans "$nextLine = ..." avec le "l" en minuscules dans "my $nextline".
my $fileName = "ExMerge.log"; open (LOGFILE,"<",$fileName) or die "nOuverture de $fileName impossible !nErreur : $!n";
my $currentLine; my $previousline; my $nextline;
while ($currentLine=<LOGFILE>) { ^^^^^^^^^^^^^^
while (defined($currentLine=<LOGFILE>)) {
Il faut ajouter la fonction defined(...) comme ci-dessous, sinon la boucle s'arrête sur une simple ligne vide ou même sur la chiffre "0". Une autre solution serait d'utiliser la construction standard "while (<LOGFILE>) { $currentLine= $_; ..." --> cette construction fait le contrôle "defined(...)" automatiquement.
Pour supprimer toute fin de ligne correspondant à la valeur courante de $/ ("n"), il vaut mieux utiliser la fonction "chomp", et non pas "chop". --> "chomp" respecte $/, mais "chop" ne le respecte pas. En plus, il vaut mieux placer la fonction "chomp" au debut dans la boucle avec $currentLine comme paramètre, juste derrière la lecture de $currentLine (et non pas à la fin avec $previousline comme paramètre).
$nextline = ... Erreur de syntaxe: il faut mettre le "L" dans "$nextLine" en minuscules. (l'expression "... = la_prochaine_ligne_dans_le_fichier" est également une erreur de syntaxe, mais voir ma proposition ci-dessous pour la remplacer)
Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la gestion des lignes ($currentLine, $previousline et $nextline) dans une nouvelle fonction "lecture()": =========================== use strict; use warnings;
my $fileName = 'ExMerge.log'; open (LOGFILE,'<',$fileName) or die "Ouverture de $fileName impossible! - Erreur: $!";
my $currentLine = ''; my $previousline = ''; my $nextline = '';
while (lecture()) { if ($currentLine =~ m/error/i) { print "n1:$previouslinen"; print "2:$currentLinen"; print "3:$nextlinen"; } }
close LOGFILE;
sub lecture { $previousline = $currentLine; $currentLine = $nextline; if (defined($nextline = <LOGFILE>)) { chomp($nextline) } return defined($currentLine); } =========================== avec le fichier 'ExMerge.log': ********************************* test01 test02 test03 Error xxx test04 test05 test06 test07 test08 Error xxx test09 test10 *********************************
"Klaus" a écrit dans le message de news: 42ee4ba5$0$18769$ : : D'abort quelques corrections "standard" dans le programme: : ... : Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la gestion : des lignes ($currentLine, $previousline et $nextline) dans une nouvelle : fonction "lecture()": : ... : -- : Klaus :
très intéressant tout ça... moi j'en étais arrivé la : ------------------------------------------------- #!/usr/bin/perl -w
use strict;
my $fileName = "ExMerge.log"; open (LOGFILE,"<",$fileName) or die "nOuverture de $fileName impossible !nErreur : $!n";
"Klaus" <klaus_gb@yahoo.com> a écrit dans le message de news:
42ee4ba5$0$18769$636a15ce@news.free.fr...
:
: D'abort quelques corrections "standard" dans le programme:
: ...
: Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la
gestion
: des lignes ($currentLine, $previousline et $nextline) dans une
nouvelle
: fonction "lecture()":
: ...
: --
: Klaus
:
très intéressant tout ça...
moi j'en étais arrivé la :
-------------------------------------------------
#!/usr/bin/perl -w
use strict;
my $fileName = "ExMerge.log";
open (LOGFILE,"<",$fileName)
or die "nOuverture de $fileName impossible !nErreur : $!n";
"Klaus" a écrit dans le message de news: 42ee4ba5$0$18769$ : : D'abort quelques corrections "standard" dans le programme: : ... : Voici mon idée: je déplace la lecture de <LOGFILE>, le "chomp" et la gestion : des lignes ($currentLine, $previousline et $nextline) dans une nouvelle : fonction "lecture()": : ... : -- : Klaus :
très intéressant tout ça... moi j'en étais arrivé la : ------------------------------------------------- #!/usr/bin/perl -w
use strict;
my $fileName = "ExMerge.log"; open (LOGFILE,"<",$fileName) or die "nOuverture de $fileName impossible !nErreur : $!n";