#/usr/bin/perl
<<DOC; 
Votre Nom : ALKHADHAR Noor et HERNANDEZ Madeleine
JANVIER 2016
 usage : perl bao1-avec-rubrique repertoire-a-parcourir rubrique-choisie
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter et la rubrique choisie
 Le programme construit en sortie un fichier TXT et un fichier XML
 avec les titres et descriptions de la rubrique en argument
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique = "$ARGV[1]";
my %dico;
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
#----------------------------------------
my $output0="$rubrique.txt"; 
if (!open (FILEOUT,">$output0")) { die "Pb a l'ouverture du fichier $output0"}; 
close(FILEOUT); 

my $output1="$rubrique.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

print FILEOUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>ALKHADHAR - HERNANDEZ</NOM>\n";
close (FILEOUT);
#----------------------------------------
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
#----------------------------------------
open (FILEOUT,">>:encoding(utf-8)", $output1);
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		next if $file =~ /^\._/; 
		next if $file =~ /^fil/;
		$file = $path."/".$file;   #2016/01/19,00,00
		if (-d $file) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		if (-f $file) {
			#       TRAITEMENT à réaliser sur chaque fichier
			#       Insérer ici votre code (le filtreur)
            if ($file =~ /$rubrique.+\.xml$/) {
                
                print "<",$i++,"> ==> ",$file,"\n";
                #traitement pour extraire texte
                $codage = "utf-8";
                open (FIC, "<:encoding($codage)", $file);
                open (OUT0, ">>:encoding($codage)", "$rubrique.txt");
                open (OUT1, ">>:encoding($codage)", "$rubrique.xml");
                #ramener tout le flux textuel de FIC sur une seule ligne
                my $texte="";
                while (my $ligne = <FIC>) {
                    chomp $ligne;
                    $ligne =~ s/\r//g;
                    $texte = $texte . $ligne;
                }

                $texte =~ s/>\s+</></g;
				$texte =~ s/&#38;/'/g;
				$texte =~ s/&#39;/'/g;
				$texte=~ s/&lt;/</g;
				$texte=~ s/&gt;/>/g;
				$texte=~ s/&amp;/et/g;
                while ($texte =~ /<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>/g) {
                        my $titre = $1;
                        my $description = $2;
                        # $titre=~s/&lt;.+?&gt;//g;
                        # $titre.=".";
                        # $titre=~s/\?\.$/\?/;
                        # $description=~s/&lt;.+?&gt;//g;
						$description =~s/<[^>]+?>//g;
                        if (!(exists $dico{$titre})) {
                            $dico{$titre} = 1;
                            print OUT0 "$titre.\n";
                            print OUT0 "$description\n\n";
                            print OUT1 "<item><title>$titre.</title><description>$description</description></item>\n";
                        }
                }
				close FIC;
                close OUT0;
                close OUT1;
                # fin de traitement du fichier
            }
        }
    }
}
#----------------------------------------------
