#/usr/bin/perl
<<DOC;
Votre Nom : anne
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";
}
}
}
}
#----------------------------------------------