Ensuite, il y a une erreur grossière :
if (/^Total/ .. /^\s*Fin\s*/) {
à remplacer par
if ($line =~ /^\s*Total/ .. $line =~ /^\s*Fin\s*/) {
Par ailleurs, comme ta description du fichier log était incomplète, la recherche de "Total" est erronnée, il faut admettre qu'il puisse y avoir des espaces avant (corrigé ci-dessus).
Enfin, la capture du premier champ d'une ligne contenant des erreurs est erronée.
Néanmoins, en ayant visionné ton fichier log, je doute que l'affichage de ce premier champ te soit suffisante, car il existe bien d'autres lignes avec ce même champ. J'ai donc ajouté l'affichage du numéro de ligne, et de la ligne complète.
Enfin, après essai, la condition de fin de tableau (recherche de Fin), inclue dans ce groupe de ligne, la ligne Fin qui contient une date qui permet de faire la correspondance avec le motif. Il faut donc exclure cette dernière ligne.
Ceci donne ce script :
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
| #!/usr/bin/perl
use strict;
use warnings;
use English;
$/ = "\r\n"; # Pour les fichiers texte DOS/Win32
# Liste des jours de la semaine
my @jours = qw(DIMANCHE LUNDI MARDI MERCREDI JEUDI VENDREDI SAMEDI);
# Jour d'aujourd'hui (localtime retourne la date d'aujourd'hui, le 6e index du tableau retourné donne le jour dans la semaine)
my $aujourdhui = qw(DIMANCHE LUNDI MARDI MERCREDI JEUDI VENDREDI SAMEDI)[(localtime)[6]];
# Fichier de log
my $fichierlog = "OutFile$aujourdhui.log";
# on teste si le fichier de log est "readable" (opérateur -r)
# Lecture du fichier
die "Pas de log pour aujourd'hui ($fichierlog)" if !-r $fichierlog;
# on affiche les lignes du fichier qui contiennent des nombres positifs dans les 2 dernières positions de chaque ligne
open ( my $LOG, '<', $fichierlog ) or die("Impossible de lire $fichierlog");
while (my $line = <$LOG>) {
chomp($line);
my $dans_la_table = $line =~ /^\s*Total/ ... $line =~ /^\s*Fin\s*/;
if ($dans_la_table && $dans_la_table !~ /E0/) {
if (my ($comment, $echec, $supplem) = $line =~ /^([^:]+).*(\d+)\s+(\d+)\s*$/) {
printf "%03d: $comment contient des erreurs ($line)\n", $NR if $echec + $supplem > 0;
}
}
} |
Partager