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
| #variable globale
$extension="ascii";
find(\&FindFormats,"@ARGV[1]"); #le find appel la fonction FindFormats à partir de l'arborescence passé en paramètre, autant de fois qu'il y a de fichiers trouves
sub FindFormats {
if (-f $File::Find::name) {
$cheminfichier=$_;
#decodage du ticket en ascii
decode_TT($cheminfichier);
open(FH,"$cheminfichier.$extension") or die "ouverture NOK du fichier $_.$extension : $!";
while(<FH>) { #tant qu'on a pas atteint la fin du fichier ascii
chomp; # supprime le caractere de fin de ligne
# si la ligne commence par [ticket \d+]
# on vérifie dans ce bloc que le ticket qui vient d'être parcouru matche ou ne matche pas
# si il match, on affiche le ticket parcouru
if ( /^\[ticket \d+\]/ ) {
# si $match defini et =!0
# on affiche l'integralite du ticket qui repond au critere SINON je le supprime du tableau de hash
$match and print "$h{$c}" or delete($h{$c});
# on a trouve un nouveau debut de ticket
# on reinitialise le flag $match à 0 et on incremente le compteur de ticket trouve
$c++;$match=0;
}
$h{$c}.="$_\n"; #on concatene la ligne lue
m/$ARGV[0]/ and $match++; #Si la chaine est trouvée, on flag avec match
}
$match and $match=0,print "$h{$c}"; #Si le dernier ticket du fichier a matché, on reinitalise le flag match et on print le dernier ticket trouve
close(FH);
#Suppression du fichier ascii après traitement
unlink "$cheminfichier.$extension";
}
} |