#======================================================
#      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 consrtruit 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 ======================

#=======================  declaration des variables 
my $rep="$ARGV[0]";      # le repertoire en entrée
my $DUMPFULL1="";       # le flux de sortie
my $output1="sortien1.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 de parcours: 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>))
                      {
                       $ligne=~s/\n/ /;
                       $f=$f.$ligne;
                       }

                      # extraire les contenus des balises description
                       
                     while ($f=~s/<description>([^<]*)<\/description>//)
                       {
                         $DUMPFULL1=$DUMPFULL1." ".$1; # séparer par un espace pour eviter de coller deux mots
                       } 
                      while ($DUMPFULL1=~m/&#([0-9]+);/) {$DUMPFULL1=~s/&#([0-9]+);/chr($1)/ge;}
                     $DUMPFULL1=$DUMPFULL1.'</CONTENU></FICHIER>'."\n";  
                        close(FPUT);
                    	}
    }
}
