#/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/(&#38;#39;)/\'/g;
                    $contenu=~s/(&#38;#34;)/\"/g;
                    $contenu=~s/([,])/$1/g;
                    $contenu=~s/(é|&#233;)/é/g;
                    $contenu=~s/&#234;/ê/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";
             
            }
         
         }
   }
}
#----------------------------------------------