BAO1                      

                                                                                                                                                                                                                                                                                                                                        Accueil              BAO1             BAO2            BAO3             BAO4                                                                                                                                                                                                                           

                                                                                         
                                   
                       BAO1  
FILTRAGE et NETTOYAGE

                 

                                  Dans cette première boîte à outils, nous allons construire un programme Perl qui 
                                  parcourt une arborescence de fils RSS. Il génère en sortie un document structuré 
                                  XML et il filtre le contenu textuel des balises <TITLE> et <DESCRIPTION>.

                               
                                     Le programme est divisé en 3 parties :

                                       1. Définition des paramètres d'entrées et de sorties.

                                       2. Formatage en fichier XML.

                                       3. Sous programme : parcoursarborescencefichiers.

                                           - parcours  des sous répertoires.

                                           - automatisation du filtrage.

                                     1. Définition des paramètres d'entrées et de sorties:

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


                               2. Formatage en fichier XML.

           &entete_xml {
            my $output1= shift(@_);
            if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};    
               print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
               print FILEOUT "<PARCOURS>\n";
               print FILEOUT "<NOM>Votre nom</NOM>\n";
               close(FILEOUT);
                                }     
          #-------------------------
           &pied_xml {
               my $output1= shift(@_);
            if (!open (FILEOUT,">>$output1")) { die "Pb a l'ouverture du fichier $output1"};
               print FILEOUT "</PARCOURS>\n";
               close(FILEOUT);
remonter

                               3. Sous programme : parcoursarborescencefichiers.

                                    -parcours  des sous répertoires:

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

                                    - automatisation du filtrage.

              if (-f $file) {    
                 # 1) s'assurer que le fichier se termine par .xml
                 # 2) c'est vrai. Repérer la rubrique et le nom de fichier de sortie
                 # 3) parcourir le fichier $file, extraire le texte et écrire dans la bonne sortie
              if ($file=~/\.xml$/) {
                 foreach my $k (keys (%rub_fich)){
              if($file=~/$k/){
                 $cle=$k;
                 print "cle = $cle\n";
                                            }
                                      }           
                 print "fichier = $rub_fich{$cle}\n";
                 open(FILEOUT,">>$rub_fich{$cle}");
                 open(FILEINPUT,$file);
                 while ($ligne = <FILEINPUT>){
              if ($ligne=~/<description>([^<]*)<\/description>/) {
                  $a=$1;
                  print FILEOUT $a,"\n";
                                               }
                                       }
                           close(FILEINPUT);
                           close(FILEOUT);
                                           }
remonter

                                       Le programme en entier   
       

#/usr/bin/perl
<<DOC;
Votre Nom :
JANVIER 2005
usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
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]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;

# %rub_fich tableaudonnantlequivalenceentrelenomdefichieretlarubrique
%rub_fich=(
    "3208"=>"ALAUNE.xml",
    "3232"=>"OPINIONS.xml",
    "3210"=>"INTERNATIONAL.xml",
    "829254"=>"LESELECTIONSAMERICAINES.xml",
    "3214"=>"EUROPE.xml",
    "3224"=>"SOCIETE.xml",
    "3234"=>"ECONOMIE.xml",
    "3236"=>"MEDIAS.xml",
    "3238"=>"RENDEZVOUS.xml",
    "3242"=>"SPORTS.xml",
    "3244"=>"ENVIRONNEMENTSCIENCES.xml",
    "3246"=>"CULTURE.xml",
    "651865"=>"TECHNOLOGIE.xml",
    "3476"=>"CINEMA.xml",
    "3546"=>"VOYAGES.xml",
    "3260"=>"LIVRES.xml",
    "3404"=>"EXAMENS.xml",
    "823353"=>"POLITIQUE.xml",
    "987718"=>"MUNICIPALESETCANTONNALES.xml",
    "876502"=>"PODCASTTELEZAPPING.xml",
    "970371"=>"PODCASTRADIOZAPPING.xml" );
# on intègre le contenu de la variable contenant le filtrage
foreach my $k (keys (%rub_fich)){
    &entete_xml($rub_fich{k});
}
#----------------------------------------
&parcoursarborescencefichiers($rep);    #recurse!
#----------------------------------------
foreach my $k (keys (%rub_fich)){
    &pied_xml($rub_fich{k});
}

#----------------------------------------
# on formate la sortie : fichier XML avec entete et

exit;
#----------------------------------------------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 =~ /^\.\.?$/;
        $file = $path."/".$file;
        if (-d $file) {
            &parcoursarborescencefichiers($file);    #recurse!
        }
        if (-f $file) {    
        # 1) s'assurer que le fichier se termine par .xml
        # 2) c'est vrai. Repérer la rubrique et le nom de fichier de sortie
        # 3) parcourir le fichier $file, extraire le texte et écrire dans la bonne sortie
         if ($file=~/\.xml$/) {
            foreach my $k (keys (%rub_fich)){
                if($file=~/$k/){
                    $cle=$k;
                    print "cle = $cle\n";
                }
            }           
            print "fichier = $rub_fich{$cle}\n";
            open(FILEOUT,">>$rub_fich{$cle}");
            open(FILEINPUT,$file);
            while ($ligne = <FILEINPUT>){
              if ($ligne=~/<description>([^<]*)<\/description>/) {
                  $a=$1;
                  print FILEOUT $a,"\n";
                }
            }
            close(FILEINPUT);
            close(FILEOUT);
         }
     
     
        }
    }   
     
}
#-------------------------
&entete_xml {
    my $output1= shift(@_);
    if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};    print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
    print FILEOUT "<PARCOURS>\n";
    print FILEOUT "<NOM>Votre nom</NOM>\n";
    close(FILEOUT);
}     
#-------------------------
&pied_xml {
    my $output1= shift(@_);
    if (!open (FILEOUT,">>$output1")) { die "Pb a l'ouverture du fichier $output1"};
    print FILEOUT "</PARCOURS>\n";
    close(FILEOUT);
}                



remonter