Filtrage et nettoyage avec Perl

 

    L'objectif de cette première étape, est de construire un programme Perl qui parcourt une arborescence de fils RSS et applique un traitement sur chaque fichier parcouru dans cette arborescence. En sortie le programme doit construire un document structuré en format XML en filtrant les contenus textuels des balises DESCRIPTION et TITLE.

Le programme Perl parcours-arborescence-fichiers.pl est un programme récursif,  lors de son parcours, s'il rencontre un répertoire il relance le parcours, si il rencontre un fichiers XML il lance le traitement du filtrage.

Description du script:

    Le script parcours-arborescence-fichiers.pl se compose de trois parties essentielles:

La première partie est une définition des paramètres d'entrée / sortie et le traitement d'erreur avec "die".

my $rep="$ARGV[0]";
$rep=~ s/[\/]$//;    
(on s'assure que le nom du répertoire ne se termine pas par un "/")
my $DUMPFULL1="";    
(initialisation de la variable contenant le flux de sortie)
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

La deuxième partie consiste à formater la sortie en fichier XML.

&parcoursarborescencefichiers($rep);
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Votre nom</NOM>\n";
print FILEOUT "<FILTRAGE>\n".$DUMPFULL1."\n</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;

La troisième partie qu'est un sous programme parcoursarborescencefichiers  se divise en deux sous parties:

Une partie: parcours des sous-répértoires:

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 =~ /^\.\.?$/;
    $file = $path."/".$file;
    if (-d $file) {
        &parcoursarborescencefichiers($file);
    }

Une autre partie: Automatisation du filtrage:

if (-f $file) {
      if ($file=~/0\.xml$/) {
              my $compteuritem =0;
              open(FILEINPUT,"$file");
              $DUMPFULL1.="<fichier$i> $file\n";
              while ($ligne = <FILEINPUT>) {
                  if ($ligne=~/<item>/) {
                         $compteuritem++;
                   }
             if ($ligne=~/<title>([^<]+)<\/title>/) {
                  $DUMPFULL1.="<titre> $1 </titre>\n";
             }
            if ($ligne=~/<description>([^<]+)<\/description>/) {
                  $DUMPFULL1.="<description> $1</description> \n";
             }
        }
      $DUMPFULL1.="</fichier$i>";
      print $i++,"\n";
}
close(FILEINPUT);
 

A la sortie on obtient un fichier XML : sortie.xml, pour formater ce fichier XML en HTML, nous avons défini une feuille de styles minimale (feuille de styles) , à la sortie on obtient ce fichier : (fichier)