#/usr/bin/perl
<<DOC; 
Votre Nom : Mourad Aouini
JANVIER 2005
 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 "/"
$rep=~ s/[\/]$//;
#tableau contenant mes deux rubriques
%rubriques = ("3210","international",
	   "3214","europe",);
#Je crée mes fichiers de sortie .txt
foreach $rubrique (values %rubriques) 
{
	my $output=$rubrique.".txt";
	if (!open (FILEOUT,">",$output)) 
	{
		die "Pb a l'ouverture du fichier $output";
	}
}
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
foreach $rubrique (values %rubriques) 
{
	my $output=$rubrique.".txt";
	if (!open (FILEOUT,$output)) 
	{
		die "Pb a l'ouverture du fichier $output";
	}
	close(FILEOUT);
}
exit;
#----------------------------------------------

#----------------------------------------------
sub parcoursarborescencefichiers 
{
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    #tableau qui présente tous les caractéres spéciaux et leurs entités
    %char_speciaux=("&#38;#39;","\'",
	   "&#38;#34;","\"",
	   "&#233;","é",
	   "&#234;","ê",
	   "&amp;egrave;","é",
	   "&amp;eacute;","è",
	   "&amp;agrave;","à",
	   "&amp;ccedil;","ç",
	   "&amp;euml;","ë",
	   );

    foreach my $file (@files) 
	{
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) 
		{
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if ((-f $file)&&(($file=~/3210/)&&($file=~/\.xml$/)) || (($file=~/3214/)&&($file=~/\.xml$/))) 
		{
			my $DUMPFULL1="";
			open(FILEINPUT,$file);
			# Découpage de chemin pour avoir des inforamtions sur la date et le nom du fichier
			while ($ligne = <FILEINPUT>)
			{
				if ($ligne=~/<title>([^<]+)<\/title>/) 
				{
					my $recup=$1;
					# enlève toutes les balises comme la balise <img> par exemple
					$recup=~s/&lt;((\w)*(\W*))*&gt;//g;  
					# Boucle permet de remplacer les entité Html
					foreach $char (keys %char_speciaux)
					{
						$recup=~s/$char/$char_speciaux{$char}/g;
					}
					#Cette condition de if permet de ne pas stoker les phrases redondantes dans notre fichiers
					if ($DUMPFULL1=~/$recup/g){next;}
					chomp($recup);
					$DUMPFULL1.= $recup."\n";
				}
				if ($ligne=~/<description>([^<]+)<\/description>/) 
				{
					my $recup=$1;
					$recup=~s/&lt;((\w)*(\W*))*&gt;//g; 
					# Boucle permet de remplacer les entité Html
					foreach $char (keys %char_speciaux)
					{
					      $recup=~s/$char/$char_speciaux{$char}/g;
						 
					}
					#Cette condition de if permet de ne pas stoker les phrases redondantes dans notre fichiers
					if (($recup=~/Toute l'actualité au moment de la connexion/g)||($DUMPFULL1=~/$recup/g)){next;}
					 chomp($recup);
					$DUMPFULL1.=$recup."\n";
				}
		        }
			foreach $rubrique (keys %rubriques) 
			{
			  if($file =~/$rubrique/)
			  {
				my $output=$rubriques{$rubrique}.".txt";
				if (!open (FILEOUT,">>",$output)) 
				{
					die "Pb a l'ouverture du fichier $output";
				}
				print FILEOUT $DUMPFULL1;
			  }
			}	
		}
	
	close(FILEINPUT);
 }
}   
#----------------------------------------------
