#!/usr/bin/perl
<<DOC; 
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 lancer : perl fichier.pl 2019 3208
 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]";
my $rubrique = "$ARGV[1]";
chomp $rubrique;

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

#ouvrir le fichier
open(OUT, ">:encoding(utf-8)", "sortie-slurp_$rubrique.txt");
open(OUTXML, ">:encoding(utf-8)", "sortie-slurp_$rubrique.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print OUTXML "<sortie>\n";

my %dico_des_tires;
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print OUTXML "</sortie>\n";

close(OUT);
close(OUTXML);
exit;

#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    #opendir 
    opendir(DIR, $path) or die "can't open $path: $!\n";
    # readir 
    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 =~/$rubrique.+?\.xml$/){
			open(FIC, "<:encoding(utf-8)", $file);
			$/=undef;
			my $texte=<FIC>;
			close(FIC);
			$texte =~ s/\r?\n//g;
			while ($texte=~/<item>.+?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg)
			{
				my $title=$1;
				my $description=$2;

				if ( exists $dico_des_tires {$title} ) {}
				else {
					$dico_des_tires {$title} = $description;
					#调用函数,une liste($titre, $description)
					($title, $description)=&nettoyage($title,$description);

					#打印到txt文档
					print OUT "TITRE : ", $title, "\n";
					print OUT "DESCRIPTION : ", $description, "\n";
					print OUT "-----------\n";
						#打印到xml文件
					print OUTXML "<item>\n";
					print OUTXML "<titre>", $title, "</titre>","\n";
					print OUTXML "<description>", $description, "</description>","\n";
					print OUTXML "</item>\n";

					#打印到终端
					print "TITRE : ", $title, "\n";
					print "DESCRIPTION : ", $description, "\n";
					print "-----------\n";
				}
			}
	    #print $i++,"est le fichier $file\n";
		}
    }
	}
}

sub nettoyage {

	#接受参数
	#my $titre_net=shift(@_);
	my $title=$_[0];
	my $description=$_[1];

	#开始处理
	$title=~s/&#38;#34;/"/g;
	$title=~s/&lt;.+?&gt;//g; 
	$title=~s/&#38;#39;/'/g;

	$description=~s/&lt;.+?&gt;//g; 
	$description=~s/&#38;#39;/'/g;
	$description=~s/&#38;#34;/"/g;

	return $title,$description;
}