#/usr/bin/perl
<<DOC; 
JANVIER 2018
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]"; #on recupere le nom du repertoire racine # on s'assure que le nom du répertoire ne se termine pas par un "/" 
my $rubrique = "$ARGV[1]";
my %rend=();
#open(FILEOUT, ">>:encoding(utf8)", "sortie_$rubrique.txt");
#close FILEOUT;
$rep=~ s/[\/]$//; #sino =~ s/[\/]$//;

open my $sortie_txt,">:encoding(utf8)", "$rubrique.txt"; 
open my $sortie_xml,">:encoding(utf8)", "$rubrique.xml";
print $sortie_xml "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print $sortie_xml "<PARCOURS>\n";
print $sortie_xml "<NOM>Giulia Ruspantini</NOM>\n";
print $sortie_xml "<ABSTRACT>\n";

#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
#----------------------------------------

print $sortie_xml "</ABSTRACT>\n";
print $sortie_xml "</PARCOURS>\n";

close $sortie_txt; 
close $sortie_xml; 

exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_); #recupero nome repertoire
    opendir(DIR, $path) or die "can't open $path: $!\n"; #apro repertorie recu en argument, quindi $path
    my @files = readdir(DIR); #legge repertoire, read dir reenvoit une liste, quella dei documenti all'interno di DIR, e li metto in una liste #non devo trattare ./ corrente et ../ precedente se no mi ritrovo in una boucle
    closedir(DIR);         
    foreach my $file (@files) { #la lista  che ottengo é relativa al repertoire che ho appena aperto
		next if $file =~ /^\.\.?$/; #next passa al prossimo elemento se l'attuale non corrisponde a quello che cerchiamo
		$file = $path."/".$file; 
		if (-d $file) {	#vrai si l'objet est un repertorie 
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse! #ricomincio a aprire e a ripercorrere a partire dal dossier corrente
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) { #vero se arrivo a fichier
			if($file =~ m/$rubrique.+\.xml$/) #punto considerato, e fine della riga
			{
				print "<",$i++,"> ==> ",$file,"\n";  #una volta fatto si ripete finché non percorre tutta l'arboressence
				
				open my $FILEIN, "<:encoding(utf8)", $file;  #Ouverture du fichier passé en argument au script et association à un pointeur de fichier
				#open(FILEOUT, ">>:encoding(utf8)", "sortie_$rubrique.txt");
				
				my $ensemble=""; #elle va être connu dans tout le programme
				while (my $ligne=<$FILEIN>) { #sert à lire les lignes du fichier; on la déclare localement dans la boucle
				chomp $ligne;
				$ligne =~ s/\r//g;
				$ensemble = $ensemble.$ligne;

			}

			while($ensemble=~ 
			m/<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>.*?<\/item>/g)
			{	
				
				my $title = $1;
				my $description = $2;
				if (!exists $rend{$title})
				{
					$rend{$title} = 1;
					my ($titre_propre, $description_propre) = &nettoyage($title, $description);
					print $sortie_txt "$titre_propre.\n";
					print $sortie_txt "$description_propre\n\n";
					print $sortie_xml "<item>\n<titre>$titre_propre.</titre>\n<description>$description_propre</description>\n</item>\n";
				}
	
			}

			close FILEIN;
			#close FILEOUT;

			}
			
			
		}
    }
}
sub nettoyage {

	# @_ c'est une liste
	# my $var1 = $_[0];

	my $var1 = shift(@_);   # shift supprime premier elemen et le recupere dans une variable
	my $var2 = shift(@_);

	# $description =~s/&lt;.+?&gt;//g;
	  $var1 =~s/&lt;.+?&gt;//g;
	  $var2 =~s/&lt;.+?&gt;//g;
	  $var1 =~s/&amp;/et/g;
	  $var1 =~s/&amp;/et/g;
	  
	  
	# $description =~s/&#38;#34;//g;
	# $description =~s/&#38;#39;/'/g;
	
	return $var1, $var2;

}
#----------------------------------------------
