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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #!/usr/bin/perl
use strict;
use warnings;
my $repertoire = 'd:/tempo';
my $fichier_resultat = 'resultat.txt';
# Récupération des fichiers dans les répertoires et sous répertoires
# on récupère les fichiers de type testX.txt
my @mes_fichiers = grep {/test\d*\.txt$/i} getFiles($repertoire);
# On stocke toutes les urls et leur nombre dans ce hash
my %Totalite_urls;
# Lecture de tous les fichiers
foreach my $fichier ( @mes_fichiers ) {
# ouverture du fichier
open( my $fh, '<', $fichier ) or die("Impossible de lire $fichier\nE/S : $!\n");
# Lecture ligne à ligne
FICHIER:
while ( my $ligne = <$fh> ) {
# supression retour chariot
chomp $ligne;
# si $url et $nombre incorrect, on passe à la suite
my ( $url, $nombre );
unless ( ( $url, $nombre ) = $ligne =~ m{(http.*?)\s+(\d+)}i ) {
next FICHIER;
}
# stockage de l'url
$Totalite_urls{$url} += $nombre;
}
# Fermeture fichier
close($fh);
}
# A ce stade, notre hash contient toute les urls, on les afiche
# ouverture du fichier resultat
open( my $fh_resultat, '>', $fichier_resultat )
or die("Impossible d'ecrire dans $fichier_resultat\nE/S : $!\n");
# Lecture du hash en triant les urls
foreach my $url ( sort keys %Totalite_urls ) {
print {$fh_resultat} "$url $Totalite_urls{$url}\n";
}
# Fermeture fichier
close($fh_resultat);
sub getFiles {
my ($repertoire) = @_;
my @fichiers;
# Ouverture d'un répertoire
opendir( my $FhRep, $repertoire )
or die "impossible d'ouvrir le répertoire $repertoire\n";
# Liste fichiers et répertoire sauf (. et ..)
my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
# Fermeture du répertoire
closedir($FhRep);
# On récupère tous les fichiers
foreach my $nom (@Contenu) {
# Fichiers
if ( -f "$repertoire/$nom" ) {
push( @fichiers, "$repertoire/$nom" );
}
# Repertoires
elsif ( -d "$repertoire/$nom" ) {
# recursivité
push( @fichiers, getFiles("$repertoire/$nom") );
}
}
return @fichiers;
} |
Partager