#/usr/bin/perl
<<DOC;
Votre Nom : WU
JANVIER 2006
usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter
Le
programme construit en sortie un fichier structuré contenant sur
chaque ligne le nom du fichier et le résultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
DOC
# récupération du nom du répertoire.-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie ; my=déclare la variable
my $DUMPFULL1="";
#----------------------------------------
# création du fichier de sortie
my $output2="Nuage_sansetiquetage_2005_2006.txt";
if (!open (OUTPUT2,">$output2")) { die "Pb a l'ouverture du fichier $output2"};
# lancement de la procédure qui parcours l'arborescence-----------------------------------
&parcoursarborescencefichiers($rep); #recurse!
#----------------------------------------
print OUTPUT2 $DUMPFULL1;
# fermeture du fichier de sortie
close(FILEOUT2);
exit;
# parcours de l'arborescence en recherche des fichiers--------------------------------------------
sub parcoursarborescencefichiers {
# récupération du chemin du dossier à parcourir
my $path = shift(@_);
# ouverture du dossier ou message d'erreur
opendir(DIR, $path) or die "can't open $path: $!\n";
# lecture du dossier et affectation des files trouvés à un tableau scalaire
my @files = readdir(DIR);
# fermeture du dossier
closedir(DIR);
# pour chaque file trouvé on fait le suivant:
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
# on donne au file le chemin à partir du dossier initial
$file = $path."/".$file;
# si le file en question est un dossier, on répète le traitement effectué
if (-d $file) {
&parcoursarborescencefichiers($file); #recurse!
}
# si le file en question est un fichier on applique un traitement différent
if (-f $file) {
# si le nom du file corresponds les noms ci-dessous
if (($file=~/0,2.*\.xml/) || ($file=~/AFP-stories.xml/)) {
$file=~/(200[56])\/([A-Za-z]{3})\/([0-9]+)\/([0-9][0-9]-[0-9][0-9]-[0-9][0-9])\/(0,2.*\.xml|AFP-stories)/;
# $1=année de 2005 ou 2006
$an=$1;
# $2=mois qui contient trois lettres
$mois=$2;
# $3=jour
$jour=$3;
# $4=heure
$heure=$4;
# enlever le tiret
$heure=~s/\-//g;
print "OK : $file\n";
open (FILEIN,"$file");
while ($ligne = <FILEIN>){
# traitement du contenu de la balise description
if
($ligne=~/<description>([^<]+)<\/description>/) {
$contenu=$1;
$contenu=~s/(&#39;)/\'/g;
$contenu=~s/(&#34;)/\"/g;
$contenu=~s/([,])/$1/g;
$contenu=~s/(é|é)/é/g;
$contenu=~s/ê/ê/g;
$contenu=~s/è/è/g;
$contenu=~s/ô/ô/g;
$contenu=~s/Ã[^.*]/à/g;
$contenu=$an.$mois.$jour.$heure."\n".$contenu."\n\n";
$DUMPFULL1 = $DUMPFULL1 . $contenu ;
}
}
close (FILEIN);
print $i++,"\n";
}
}
}
}
#----------------------------------------------