#!/usr/bin/perl
<<DOC;
Objectif :
– Vous devez construire un programme qui parcourt une arborescence de fichiers et applique un traitement d’étiquetage
sur chacun des fichiers rencontrés au moment du parcours
– En sortie, le programme doit construire un fichier structuré (XML) contenant une trace du traitement réalisé sur les fichiers
– Application :
! Ressources fournies :
– Une arborescence de fils RSS
! Les 2 transparents suivants montrent l ’allure de l’arborescence et le
contenu des fils
– Un squelette minimal du programme de parcours
– Traitement :
! étiqueter les contenus textuels des balises DESCRIPTION et TITLE (i.e. votre programme de filtrage construit précédemment)
! IMPORTANT : on « conservera » aussi le titre de la « rubrique » du fil (balise title sous channel cf présentation du corpus)
DOC

#-------------------------------------------------------------------------
#Etape 1: je veux recuperer tous les fichier dans le repertoire 
#-------------------------------------------------------------------------
my $repertoire = "$ARGV[0]"; #l'adresse de repertoire
%dico; #hash
#cree les fichiers pour stoker le texte
open (OUTPUT, ">:encoding(utf8)", "output1.txt") or die "NE PEUT PAS OUVIRE LE FICHIER !";
open (OUTPUT1, ">:encoding(utf8)", "output1.xml") or die "NE PEUT PAS OUVIRE LE FICHIER !";

print OUTPUT1 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print OUTPUT1 "<PARCOURS>\n";
print OUTPUT1 "<NOM>Yuran ZHAO et Mingqiang WANG</NOM>\n";
#print OUTPUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print OUTPUT1 "</PARCOURS>\n";

&parcours($repertoire); #appeller la fonction qui recupeter tous les fichies qu'on a besoin dans un repertoire arborescence et les traiter

close OUTPUT;
close OUTPUT1;

sub parcours
{
  my $path = shift(@_); #shift ==> retourne le premier element d'une liste
                        # @_ ===> une liste
  #je veux ouvrir la liste de mon repertoire
  opendir(DIR, $path) or die "NE PEUT PAS OUVIRE LE REPERTOIRE !";
  #je veux le lire
  my @file = readdir(DIR);
  closedir(DIR);
  foreach my $file (@file)
  {
    my @fichier = (@_);
    next if $file =~ /^\.\.?$/; #j'ignore le cas : nom de fichier est . ou ..
                                # avec "=~" on peut lire un variable qui contient une expression reguliere
    $file = $path."/".$file;
    $fichier = $file;
    if (-d $file) #-d ==> test si $file a un repertoire (qui a une liste)
    {
      print "<NOUVEAU REPERTOIRE> ========> ",$file,"\n";
      &parcours($file); #recurse!
      print "<FIN REPERTOIRE> =========> ",$file,"\n";      
    }

    #-----------------------------------------------------------------------------------------
    #Etape 2: je veux traiter tous les fichiers que on a trouvé : filtrage et nettoyer
    #-----------------------------------------------------------------------------------------
    if (-f $file)  #-f ==>verifier si $file est un fichier normal
    {
      #je veux travaille sur uniquement les fichier xml 
      if ($file =~ /.+\.xml/)
      {
        #je ouvert ce fichier
        open (INPUT, "<:encoding(utf8)", $file);
        #je cree un variable vide pour stoker le contenu
        my $texte = "";
        while (my $ligne =<INPUT>) #filtrage
        {
          chomp $ligne; #supprime le retour de ligne
          $ligne =~s/\r//g; #enleve tous les "\r" 
          $texte = $texte.$ligne;
        }
        #je ne veux pas l'espace entre les chevrons
        $texte =~ s/> +</></g;
        # sortir la partie "title" et "description"
        while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g)
        {
          my $title = $1;
          my $description = $2;
          #-----------------------------------------------------------------------------------
          # nettoyage
          #-----------------------------------------------------------------------------------
          $description =~ s/&lt;.+?&gt;//g;
          $title =~ s/&amp//g;
          $description =~ s/xE[0-9]//g;

          if (!(exists $dico{$title})) 
          {
            $dico{$title} = 1; #la valeur correspondant à la clef $titre est 1
            print OUTPUT "Fichier : $file\n";
            print OUTPUT "TITLE : $title.\n";
            print OUTPUT "DESCRIPTION : $description\n\n";
            print OUTPUT1 "<ITEM><TITLE>$title<\/TITLE><\/ITEM><DESCRIPTION>$description<\/DESCRIPTION>\n";
          }
        }
      }
      close INPUT; 
    }
  }# traitement du fichier est fini !
} #fin de parcours
