#/usr/bin/perl
<<DOC; 
CUI Danxin, NA Young-Ju, VARTAMPETIAN Markarit 

2019 - 2020 
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entr? le nom du r?ertoire contenant les fichiers
 ?traiter
 Le programme construit en sortie un fichier structur?contenant sur chaque
 ligne le nom du fichier et le r?ultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>


#encodage 
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]"; #1er argument transmettre le nom de  racine -> 2019
my $rubrique="$ARGV[1]"; #argument qui transmet le rubique

# on s'assure que le nom du repertoire ne se termine pas par un "/"
#~s/A/B remplacer A avec B ~sed 

$rep=~ s/[\/]$//;

my %dico="dico_des_titres";
# on initialise une variable contenant le flux de sortie
#%dico est un "hash" --> key:value liste
#pour obtenir le valeur d'un key --> ${key} 

#----------------------------------------
open(OUT,">:encoding(utf8)","sortie-regex$rubrique.txt"); #output fichier : txt 
open(OUTXML,">:encoding(utf8)","sortiexml-regex$rubrique.xml"); #output fichier : xml 
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";  #ajouter header xml 

&parcoursarborescencefichiers($rep);	 # activer la function pour parcourir l'arborscence + lecture de repetoire

close OUT;  #fermeture 
close OUTXML; #on ouvre une fois le fichier

exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);  
    opendir(DIR, $path) or die "Can't open $path: $!\n";
    my @files = readdir(DIR); #@file : liste de resources repetoire (nom de fichier)
    closedir(DIR);
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/; #rep .|..
		$file = $path."/".$file; #le programme commence par 2019 tj
		if (-d $file) {
			&parcoursarborescencefichiers($file);	#recurse! c'est un repetoire!
		}
		if (-f $file) {
			#Boucle pour traiter chaque fichier - filtreur
			if ($file =~/$rubrique.+xml$/) { #on veut que des documents xml
				open(FIC,"<:encoding(utf8)",$file);
				$/=undef; #Declaration d'une variable sans donner une valeur ''
				$textread=<FIC>;
				close FIC;
				#regex pour recuperer la description et le titre 
				while ($textread=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
					my $title=$1;
					my $description=$2;
					if (exists $dico_des_titres{$title}) {}
					else { 
						$dico_des_titres{$title}=$description ; #si j'ai déjà rencontrer la clé, je fais rien
						# Appel du sous-programme de nettoyage 
						($title,$description)=&nettoyage($title,$description);
						#	 Ecriture des résultats en sorties
						print OUT $title,"\n";
						print OUT $description,"\n";
						print OUT "--------------------\n";
						print OUTXML "<item>\n";
						print OUTXML "<titre>$title</titre>\n";
						print OUTXML "<description>$description</description>\n";
						print OUTXML "</item>\n";
					}
					print "Traitement du fichier : $file No. : ", $i++,"\n"; #compteur: fichier de l'arborescence 
				}
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
    my $title = $_[0];
    my $description = $_[1];
    $description=~s/&lt;.+?&gt;//g;
    $description=~s/&#38;#39;/'/g;
    $description=~s/&#38;#34;/"/g;
    $title=~s/&lt;.+?&gt;//g;
    $title=~s/&#38;#39;/'/g;
    $title=~s/&#38;#34;/"/g;
    $title=~s/$/\./g;
    return $title,$description;

}
