#/usr/bin/perl 
<<DOC;
Nurul Zulaikha AZMI MURAD 22003626
BAO1 REGEX PERL
cmd : perl script repertoire rubrique
DOC
#----------------------------------------------------------- 
my $rep="$ARGV[0]"; # le répertoire à parcourir
my $rubrique="$ARGV[1]"; # la rubrique sur laquelle on travaille
my %dico_des_titres=();
my $numberItem=0; #le nombre d'articles
my $nbFile=0; #le nombre de fichiers

# on s'assure que le nom du répertoire ne se termine pas par un "/" 
$rep=~ s/[\/]$//;

#Initialisation des fichiers de sorties 
open my $OUTXML,">:encoding(utf8)","sortie_$rubrique.xml"; 
open my $OUTXT,">:encoding(utf8)","sortie_$rubrique.txt"; 

print $OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; # écriture de l'en-tête dans le fichier xml
print $OUTXML "<extraction rubrique=\"$rubrique\" pg=\"perl\">\n"; # écriture de la balise racine dans le fichier xml
print $OUTXML "<File>"; #pour eviter le probleme d'indention
#----------------------------------------
#appel de la fonction principale
&parcoursarborescencefichiers($rep); #recurse! 
#---------------------------------------- 
print $OUTXML "</File>";  
close $OUTXT;

print "Nb item : $numberItem \n"; 
print "Nb file : $nbFile \n"; 
exit; 
#---------------------------------------------- 
#on lance la fonction appelée plus haut
sub parcoursarborescencefichiers { 
	my $path = shift(@_); 
	opendir(my $DIRhandle, $path) or die "can't open $path: $!\n"; 
	my @files = readdir($DIRhandle); 
	closedir($DIRhandle); 
	
	foreach my $file (@files) { 
		next if $file =~ /^\.\.?$/; 
		$file = $path."/".$file; 
		if (-d $file) { # -d vrai si l'objet est un répertoire
		&parcoursarborescencefichiers($file); #recurse! 
		} 
		
		#Selection de la rubrique 
		if (-f $file) { # si l'objet n'est pas un répertoire
			if ($file =~/$rubrique.+xml$/) 
			{ 
				$nbFile++;
				open my $fic,"<:encoding(utf8)",$file; 
				$/=undef;
				my $textelu=<$fic>; 
				close $fic; 
			
				while ($textelu=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs)
				{
					$numberItem++;
					
					#fonction nettoyage
					my $titre=&nettoyage($1); # $1 correspond à ce qui est mémorisé entre parenthèses dans les balises title
					my $description=&nettoyage($2); # $2 correspond à ce qui est mémorisé entre parenthèses dans les balises description
					if (!(exists $dico_des_titres{$titre})) { 
					$dico_des_titres{$titre}=$description ;
		
					# Ecriture des résultats en sorties
					print $OUTXT "$titre \n";
					print $OUTXT "$description \n";
					print $OUTXT "---------------------------------------------------------------------------\n";
					
					# Ecriture des résultats en sorties et des balises
					print $OUTXML "<item><titre>$titre</titre><description>$description</description></item>\n";
					}
				}
			}	
		}					
	}
}

#------------------------------------------------	
# appel a la fonction nettoyage
sub nettoyage { 
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	$texte.=".";
	$texte=~s/\.+$/\./; 
	$texte=~s/&nbsp//g; #pour eviter le probleme d'espace 
	return $texte;
}