diff --git a/IRC3.pl b/IRC3.pl index ecb89ca..1a6b7b4 100755 --- a/IRC3.pl +++ b/IRC3.pl @@ -13,13 +13,13 @@ # Recherche du nom du programme my ($programme) = $0 =~ m|^(?:.*/)?(.+)|; -my $usage = "Usage : \n $programme -t table -r répertoire [ -s fichier_sortie ] [ -l log ] [ -cq ]\n" . +my $usage = "Usage : \n $programme -t table -r répertoire [ -e extension ] [ -s fichier_sortie ] [ -l log ] [ -cq ]\n" . " $programme -t table -f fichier_entrée [ -s fichier_sortie ] [ -l log ] [ -cq ]\n" . - " $programme -t table [ -l log ] [ -cq ]\n" . + " $programme -t table [ -e extension ] [ -l log ] [ -cq ]\n" . " $programme -h\n\n"; -my $version = "4.1.1"; -my $dateModif = "11 Août 2017"; +my $version = "4.3.0"; +my $dateModif = "03 Novembre 2017"; my @liste = (); my @table = (); @@ -36,11 +36,13 @@ my $repertoire = ""; my $sortie = ""; my $table = ""; +my @extensions = (); eval { $SIG{__WARN__} = sub {usage(1);}; GetOptions( "casse" => \$casse, + "extension=s" => \@extensions, "fichier=s" => \$fichier, "help" => \$aide, "log=s" => \$log, @@ -61,6 +63,8 @@ print $usage; print "Options :\n"; print " -c tient compte de la casse (majuscule/minuscule) des termes recherchés \n"; + print " -e indique l'extension (e.g. “.txt”) du ou des fichiers textes à traiter \n"; + print " (possibilité d’avoir plusieurs extensions en répétant l'option) \n"; print " -f indique le nom du fichier texte à traiter \n"; print " -h affiche cette aide \n"; print " -l indique le nom du fichier récapitulatif où sera écrit pour chaque fichier \n"; @@ -208,7 +212,14 @@ } elsif ( $repertoire ) { opendir(DIR, $repertoire) or die "$!,"; - my @fichiers = grep(!/^\./o, readdir(DIR)); + my @fichiers = (); + if ( @extensions ) { + my $extensions = "(" . join("|", map {s/^\.//o; $_;} @extensions) . ")"; + @fichiers = grep(/\.$extensions\z/, grep(!/^\./o, readdir(DIR))); + } + else { + @fichiers = grep(!/^\./o, readdir(DIR)); + } closedir(DIR); foreach $fichier (@fichiers) { traite("$repertoire/$fichier"); @@ -270,6 +281,7 @@ my $texte = ""; my @resultats = (); +my %tmp = (); print STDERR "\r", " " x 75, "\r Traite le fichier $nom " if not $quiet; @@ -288,6 +300,11 @@ if ( /^\s*$/o ) { if ( $texte ) { push(@resultats, recherche($nom, $texte)); + while( my $resultat = shift @resultats ) { + print "$nom\t$resultat\n"; + my ($ref, $chaine) = split(/\t/, $resultat); + $tmp{$ref} ++; + } $texte = ""; } next; @@ -298,17 +315,15 @@ if ( $texte ) { push(@resultats, recherche($nom, $texte)); + while( my $resultat = shift @resultats ) { + print "$nom\t$resultat\n"; + my ($ref, $chaine) = split(/\t/, $resultat); + $tmp{$ref} ++; + } } close INP; -my %tmp = (); -foreach my $resultat (@resultats) { - print "$nom\t$resultat\n"; - my ($ref, $chaine) = split(/\t/, $resultat); - $tmp{$ref} ++; - } - my $nb_refs = 0; my $nb_occs = 0;