#======================================================
#      Le programme du parcours de l'arborescence
#=====================================================       


#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;


<<DOC;

MAAFA ZAHIR DESS IM INALCO
FEVRIER 2006

Usage:     perl    <parcours-arborescence-fichiers.pl>      <nom-du-repertoire>
 
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 résultat du filtrage:

<FICHIER><NOM>NOM_FICHIER</NOM><CONTENU> CONTENU_TEXTE </CONTENU></FICHIER>

DOC

#=============== LE  PROGRAMME  PRINCIPAL ==================

#==================== déclaration des variables  ====================
my $rep="$ARGV[0]";      # le répertoire en entrée
my $DUMPFULL1="";       # le flux de sortie
my $output1="sortie.xml"; # le fichier en sortie
my $i=0;
$rep=~s/[\/]$//;     # supprimer le slash final

#====================  ouvrir le fichier en ecriture  ==================

if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};


#===================    le parcours de l'arbre =====================

&parcoursarborescencefichiers($rep);

#==================== le fichier xml final ========================

print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>MAAFA ZAHIR</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;


#=========== FIN DU PROGRAMME PRINCIPAL ===============


#======================================================
# La procedure :        parcoursarborescencefichier
#======================================================

sub parcoursarborescencefichiers {

#==============Déclaration des variables==============
    my $path = shift(@_);
    my $f;
    my $ligne;
#=============================================
   
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
    next if $file =~ /^\.\.?$/;
    $file = $path."/".$file;
    if (-d $file) {
        &parcoursarborescencefichiers($file);    #recurse!
                  }
    if (-f $file) {
                      # creation de la balise <NOM> pour sauvegarder le nom du fichier
 
                      $DUMPFULL1=$DUMPFULL1.'<FICHIER><NOM>'."$file".'</NOM><CONTENU>';

                      # lecture du contnu du fichier xml en entrée
                     
                      if ($file=~/AFP/)
                      {
                       open (FPUT,'<:encoding(utf8)',"$file");
                       }
                       else
                       {
                       open (FPUT,'<:encoding(iso-8859-1)',"$file");
                       }
                      $f='';
                     while (defined( $ligne=<FPUT>))
                      {
                       chomp($ligne);
                       $f=$f.$ligne;
                       }
                      # extraire les contenus des balises description
                       
                     while ($f=~s/<description>([^<]*)<\/description>//)
                       {
                         $DUMPFULL1=$DUMPFULL1.$1;
                       }
                    #remplacement des caracteres spéciaux
while ($DUMPFULL1=~m/&#([0-9]+);/) {$DUMPFULL1=~s/&#([0-9]+);/chr($1)/ge;}
                     $DUMPFULL1=$DUMPFULL1.'</CONTENU></FICHIER>'."\n";  
                        close(FPUT);
                        }
    }
}