Série 1 : Perl
Trinquier Aurélia
A partir d'une arborescence de fichiers xml (un ensemble de fils rss issus du Monde) il s'agit de créer un script Perl permettant d'extraire le contenu
des balises descriptions.
Appliqué sur le dossier 2005 on obtient en sortie le fichier
SORTIE.xml
Puis en lui appliquant une feuille de style on obtient cette visualisation.
Le programme :
#/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
print "Quelle est la balise à filtrer?\n" ;
$exp=<STDIN> ;
chomp $exp ;
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# 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 $DUMPFULL1="";
#----------------------------------------
my $output1="BaO1.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du
fichier $output1"};
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\"
?>\n<?xml-stylesheet type=\"text/xsl\"
href=\"Style.xsl\"?>\n";
print FILEOUT
"<PARCOURS>\n<Nom>Aurélia
Trinquier</Nom>\n";
#----------------------------------------
&parcoursarborescencefichiers($rep); #recurse!
#----------------------------------------
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) {
# TRAITEMENT à réaliser sur chaque fichier
# Insérer ici votre code (le filtreur)
open (FILEINPUT,"$file") ;
print FILEOUT
"<FICHIER>\n<NOM>$file</NOM>\n";
while ($ligne = <FILEINPUT>){
if ($ligne=~/<$exp>(.*)<\/$exp>/) {
$ligne=$1;
# Rectification des problèmes de codage
$ligne=~s/(')/\'/g;
$ligne=~s/(")/\"/g;
$ligne=~s/à©/é/g;
$ligne=~s/é/é/g;
$ligne=~s/ê/ê/g;
$ligne=~s/è/è/g;
$ligne=~s/Ã/à/g;
$ligne=~s/ç/ç/g;
$ligne=~s/à§/ç/g;
$ligne=~s/à´/ô/g;
$ligne=~s/(é)/é/g;
$ligne=~s/(ê)/ê/g;
print FILEOUT
"<FILTRAGE>$ligne</FILTRAGE>\n";
}
}
print FILEOUT "</FICHIER>\n" ;
close (FILEINPUT);
}
}
}
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;