#/usr/bin/perl
<<DOC;
Votre Nom : MA
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
 ex) perl perl/BAO1.pl src/2021 3210
 Le programme prend en entrée le nom du répertoire-racine contenant les fichiers
 à traiter et le nom de la rubrique à traiter parmi ces fichiers
DOC
#-----------------------------------------------------------
use strict;
use utf8;
#-----------------------------------------------------------
my $rep="$ARGV[0]"; # Source directory <- 2021
my $rubrique ="$ARGV[1]"; # category of choice <- 3210 : International
$rep=~ s/[\/]$//; # on s'assure que le nom du répertoire ne se termine pas par un "/"

open my $OUT ,">:encoding(utf8)","./rst/sortie-slurp_$rubrique.txt";
open my $OUTXML,">:encoding(utf8)","./rst/sortiexml-slurp_$rubrique.xml";
print $OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print $OUTXML "<corpus2020>\n";
my %dico_des_titres=();
my $numberItem=0;
my $nbFile=0;
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print $OUTXML "</corpus2020>\n";
close $OUT;
close $OUTXML;
print "Nb item : $numberItem \n";
exit; # <- fin de programme
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(my $DIRhandle, $path) or die "can't open $path: $!\n";
    my @files = readdir($DIRhandle); # récupère les fichiers cachés
    closedir($DIRhandle);
		foreach my $file (@files) {
		next if $file =~ /^\.\.?$/; # si file contient .., on va next = continue, sauter un item de list
		$file = $path."/".$file;
		if (-d $file) {
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) {
			if ($file =~/$rubrique.+xml$/) {
				print $nbFile++," Traitement de : ",$file,"\n";
				open my $fic,"<:encoding(utf8)",$file;
				$/=undef;     #ou $\=""
				my $textelu=<$fic>;
				close $fic;
				while ($textelu=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
					my $titre=$1;
					my $description=$2;
					$numberItem++;
					if (!(exists $dico_des_titres{$titre})) { # $dico_des_titres: archiver les titres pour ne pas avoir des doublons
						$dico_des_titres{$titre}=$description ;
						# Appel du sous-programme de nettoyage
						($titre,$description)=&nettoyage($titre,$description);
						# Ecriture des résultats en sorties
						print $OUT $titre,"\n";
						print $OUT $description,"\n";
						print $OUT "--------------------\n";
						print $OUTXML "<item>\n";
						print $OUTXML "<titre>$titre</titre>\n";
						print $OUTXML "<description>$description</description>\n";
						print $OUTXML "</item>\n";
					}
				}
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
    #my $titre=shift(@_); autre solution en vidant la liste des arguments du programmes...
    #my $description=shift(@_);
    my $titre = $_[0];
    my $description = $_[1];
	$titre=~s/^<!\[CDATA\[//;
	$titre=~s/\]\]>$//;
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
	$titre=~s/\.+$/\./g;
    return $titre,$description;
}
