#/usr/bin/perl
<<DOC;
Votre Nom : Marco FONSSATI et Nassim ZELLAL
JANVIER 2008
 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
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/" si ça se termine par / on remplace par rien
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie
my $DUMPFULL1="";
my %tableaudestextes=();
#----------------------------------------
my $output1="sortie_pour_cordial.txt";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
&parcoursarborescencefichiers($rep);    # on appelle le sous programme
#----------------------------------------
print FILEOUT "$DUMPFULL1";
close(FILEOUT);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers { # on entre dans le sous programme
    my $path = shift(@_); # on met dans la variable $path le contenu de la variable mise en argument
    opendir(DIR, $path) or die "can't open $path: $!\n"; # opendir : ouvre un rep - si on arrive pas : le pgm s'arrete et on envoie un message d'erreur
    my @files = readdir(DIR); # on lit le contenu du répertoire et on renvoie une liste qu'on stocke dans @files
    closedir(DIR);
    foreach my $file (@files) { # pour chaque ressource dans @files,on crèe $files
    next if $file =~ /^\.\.?$/; # on passe au suivant si on trouve . ou .. car on risque une boicle infinie
    $file = $path."/".$file; # on réécrit tout le chemin du fichier - le point permet la concaténation
    if (-d $file) { # on entre dans cette boucle si il y a dans $file un répertoire (-d vérifie que l'argument est un répertoire)
        &parcoursarborescencefichiers($file);    #recurse!
    }
    if (-f $file) { # on entre dans cette boucle si il y a dans $file un fichier  (-f vérifie que l'argument est un fichier)
        if (($file=~/0,2-651865,1-0,0.xml/) || ($file=~/0,2-3236,1-0,0.xml/)){ #if ($file=~/.xml/){ # parcourt toute l'arborescence pour ne garder que les fichiers .xml

    open(FILEIN,$file); # on ouvre le fichier qu'on va lire
    printf "$file\n"; #  on voit si ça travaille
    while ($ligne = <FILEIN>){ 
   	   if ($ligne=~/<description>([^<]+)<\/description>/){ 
  	   if (($ligne!~/Retrouvez *l.*ensemble *des/) && ($ligne!~/Lisez *l.*int.*gralit.* *de *l.*article *pour *plus *d.*information./) && ($ligne!~/Toute *l.*actualit.* *au *moment *de *la *connexion/)) {
                my $propre=$1;
                if ($propre=~/^(.+)&lt;img width='1' height='1'.*$/) {$propre=$1}; 
			    $propre=~s/&#38;#39;/\'/g;
                $propre=~s/&#38;#34;/\"/g;
                $propre=~s/&#38;//g;  
				$propre=~s/&#233;/é/g;
                $propre=~s/&#234;/ê/g;
                $propre=~s/&amp;ecirc;/ê/g;
				$propre=~s/&amp;eacute;/é/g;
                $propre=~s/&amp;egrave;/è/g;
                $propre=~s/&amp;icirc;/\î/g;
                $propre=~s/&amp;ocirc;/\ô/g;
                $propre=~s/&amp;ccedil;/\ç/g;
                $propre=~s/&amp;agrave;/\à/g;
                $propre=~s/&#38;/&/g;
                $propre=~s/&lt;/\</g;
                $propre=~s/&gt;/\</g;
				if (exists($tableaudestextes{$propre})) { 
				     $tableaudestextes{$propre}++; 
				} # mais on ne la réimprime pas afin de supprimer les doublons si il existe déjà
				else { # on entre dans cette boucle si il n'existe pas encore
				$DUMPFULL1.="$propre\n"; 
                $tableaudestextes{$propre}++; 
	}
	} 
    }
    } 
    close(FILEIN); 
    }
    }
    }
}
#----------------------------------------------

