#/usr/bin/perl
<<DOC; 
Votre Nom : 
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/[\/]$//;
# on initialise une variable contenant le flux de sortie 
my $DUMPFULL1="";
my $DUMPFULL2="";
my $cptArticle=0;
my %dicoDesTitres=();
my %dicoDesDescriptions=();
#----------------------------------------
my $output1="SORTIE.txt";
if (!open (FILEOUTTXT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
my $output2="SORTIE.xml";
if (!open (FILEOUTXML,">$output2")) { die "Pb a l'ouverture du fichier $output2"};
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print FILEOUTXML "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUTXML "<PARCOURS>\n";
print FILEOUTXML "<NOM>NK&MH</NOM>\n";
print FILEOUTXML "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUTXML "</PARCOURS>\n";
close(FILEOUTXML);
print FILEOUTTXT $DUMPFULL2;
close(FILEOUTTXT);
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) {
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) {
			if ($file=~/\.xml$/) {
				print $i++,"\n";
				open(FILEIN,$file);
				while (my $ligne=<FILEIN>) {
				    if ($ligne=~/<\/item>/) {
					$DUMPFULL1.="</article>\n";
				    }
				    if ($ligne=~/<item>/) {
					$cptArticle++;
					$DUMPFULL1.="<article numero=\"$cptArticle\">\n";
				    }
				    if ($ligne=~/<description>(.+?)<\/description>/) {
					my $text=$1;
					$text=&nettoieText($text);
					if (!(exists($dicoDesDescriptions{$text}))) {
					    $DUMPFULL1.="<description>$text</description>\n";
					    $DUMPFULL2.=$text."\n";
					    $dicoDesDescriptions{$text}++;
					}
					else {
					    $dicoDesDescriptions{$text}++;
					    $DUMPFULL1.="<description>-</description>\n";
					}
				    }
				    if ($ligne=~/<title>(.+?)<\/title>/)  {
					my $text=$1;
					$text=&nettoieText($text);
					if (!(exists($dicoDesTitres{$text}))) {
					    $DUMPFULL1.="<abstract>$text</abstract>\n";
					    $DUMPFULL2.=$text."\n";
					    $dicoDesTitres{$text}++;
					}
					else {
					    $dicoDesTitres{$text}++;
					    $DUMPFULL1.="<abstract>-</abstract>\n";
					}
				    }
				    
				}
				close(FILEIN);
			}
		}
    }
}
#----------------------------------------------
sub nettoieText {
    my $texte=shift;
    $texte =~ s/&lt;/</g;
    $texte =~ s/&gt;/>/g;
    $texte =~ s/<a href[^>]+>//g;
    $texte =~ s/<img[^>]+>//g;
    $texte =~ s/<\/a>//g;
    $texte =~ s/&#38;#39;/'/g;
    $texte =~ s/&#38;#34;/"/g;
    $texte =~ s/<[^>]+>//g;
    $texte =~ s/&#233;/é/g;
    $texte =~ s/&#234;/ê/g;
    return $texte;
}
