#/usr/bin/perl
<<DOC; 
Votre Nom : KUZNIK Ludivine
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é xml 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
#-----------------------------------------------------------

### CREATION D'UNE TABLE DE HACHAGE POUR RECUPERER LES CHIFFRES-CLES DES DIFFERENTES RUBRIQUES
%rubrique = ( 
"3208" => "A la une.xml", 
"3210" => "International.xml", 
"3214" => "Europe.xml",
"3224" => "Société.xml", 
"3232" => "Opinions.xml",
"3234" => "Economie.xml", 
"3236" => "Médias.xml", 
"3238" => "Rendez-vous.xml", 
"3242" => "Sports.xml", 
"3244" => "Sciences.xml", 
"3246" => "Culture.xml", 
"3260" => "Livres.xml", 
"3404" => "Examens2008.xml", 
"3476" => "Cinéma.xml", 
"3546" => "Voyages.xml", 
"651865" => "Technologies.xml" );



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 $DUMPFULL1="";

#----------------------------------------
# on lance le parcours d'arborescence.
&parcoursarborescencefichiers($rep);	#recurse!

# ON REPREND TOUS LES FICHIERS-RESULTATS CREES ET ON LES CLOTURE PAR </PARCOURS> AFIN  QUE LES FICHIERS .XML SOIENT BIEN FORMES
$path= "resultats/BaO1/";
opendir(DIR, $path) or die "can't open $path: $!\n";
my @newfiles = readdir(DIR);
closedir(DIR);
foreach my $fileresult (@newfiles) 	{
	if ( $fileresult =~ /\.xml$/ ) 	{ 
		 $fileresult = "resultats/BaO1/".$fileresult;
		 if (!open (FILEOUT,">>$fileresult")) { die "Pb a l'ouverture du fichier $fileresult"};	
		 print FILEOUT "</PARCOURS>\n";
		 close(FILEOUT);
		}
	}
#----------------------------------------

sub parcoursarborescencefichiers 
{
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) 
	{
		next if $file =~ /^\.\.?$/;
		$fich = $file;
		$file = $path."/".$file;
		if (-d $file) 
		{
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) 
		{
			#       TRAITEMENT à réaliser sur chaque fichier
			if ( $file =~ /\.xml$/ ) 
			{
				foreach $k (keys(%rubrique)) 
				{ 
					if ( $file =~ /$k/ ) 
					{ 
						$cle=$k;
						
					 ##################  FILTREUR #########
				    	open (FILEINPUT, $file);
						$compteurtitle=0;
						$compteurdescription=0;
						$DUMPFULL1= "<nomdefichier>$file</nomdefichier>\n";
						while ($ligne = <FILEINPUT>) 
						{
						
							if (($ligne=~/<description>(.*)<\/description>/)) 
							{
							$texte=$1;
							if ($compteurdescription != 0) 
								{
								$texte= &nettoyage($texte);
								$DUMPFULL1= $DUMPFULL1.$texte."\n";
								}
							$compteurdescription++;	
							}
						
						}
						close (FILEINPUT);
						$doss = "resultats" ;
						mkdir ($doss);
						$doss = $doss."/BaO1/" ;
						rmdir ($doss);
						mkdir ($doss);
						$out = $doss.$rubrique{$cle};
						if (!open (FILEOUT,">>$out")) { die "Pb a l'ouverture du fichier $output"};		
						if (-z FILEOUT )
							{
							print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
							print FILEOUT "<PARCOURS>\n";
							print FILEOUT "<NOM>KUZNIK</NOM>\n";
							print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
							close(FILEOUT);
                            }
						else 
							{
							print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
							close(FILEOUT);
							}			
					}
				}
			print $i++,"\n";	
								
###################
	    
			}
		}
	}

 }

sub nettoyage {
my $tmp= shift (@_);
$tmp=~ s/&#38;#39;/'/g;
$tmp=~ s/&#38;#34;/"/g;
$tmp=~ s/&#233;/é/g;
$tmp=~ s/&#234;/ê/g;
$tmp=~ s/&#91;/[/g;
$tmp=~ s/&#93;/]/g;
$tmp=~ s/&#38;/and/g;
$tmp=~ s/Retrouvez l'ensemble des dépêches sur http:\/\/www\.lemonde\.fr//g;
$tmp=~ s/Lisez l'intégralité de l'article pour plus d'information\.//g;
return $tmp;
}