#/usr/bin/perl
<<DOC; 
Votre Nom : 
JANVIER 2016
 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]";
my $rubrique="$ARGV[1]";
my %memoire=();
# 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="";
#----------------------------------------
open my $out, ">:encoding(utf-8)", "$rubrique.txt";
open my $out1,">:encoding(utf-8)", "$rubrique.xml";
print $out1 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print $out1  "<PARCOURS>\n";
print $out1  "<NOM>Xi RONG</NOM>\n";
print $out1  "<NOM>Yunbei ZHANG</NOM>\n";
print $out1  "<FILTRAGE>\n";
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
#----------------------------------------
print $out1  "</FILTRAGE>\n";
print $out1 "</PARCOURS>\n";
close $out;
close $out1;
exit;
#----------------------------------------------
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 =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) {
			#print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			#print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
			if ($file =~/$rubrique.+\.xml$/) {
				#print "<",$i++,"> ==> ",$file,"\n";
				open my $input, "<:encoding(utf-8)" ,$file;
				
				my $texte = "";
				while (my $ligne = <$input>) {
					chomp $ligne;
					$ligne =~ s/\r//g;
					$texte = $texte . $ligne ;
				}
				$texte =~ s/> +</></g;
				$texte =~ s/&#38;#39;/'/g;
				$texte =~ s/&#38;#34;/"/g;
				$texte =~ s/&#233;/é/g;
				$texte =~ s/&#234;/ê/g;
				while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g){
					my $titre="$1".".";
					my $description=$2;
					if (!(exists $memoire{$titre})) {
					$description =~ s/&lt;.+&gt;//g;
		
						print $out "$titre\n"; # on imprime le titre
						print $out "$description\n\n"; # on imprime la description
						print $out1 "<item><titre>$titre</titre><description>$description</description></item>\n";
						$memoire{$titre}=1;
						}
				}
				close $input;	
				
				
			}
		}
    }
}
#----------------------------------------------
