BOITE A OUTILS 1
Objectif :Parcourir une arborescence de répertoires (en gardant trace du parcours), ouvrir chaque fichier trouvé dans l'arborescence (en gardant trace du nom du fichier analysé), et extraire le contenu de chaque balise 'description' de chaque fichier traité. Le résultat doit être présenté dans une structure XML, reflétant le parcours dans l'arborescence, et le contenu de chaque balise pour chaque fichier de chaque répertoire de l'arborescence parcourue.
Données de base : un programme perl nous a été fourni comme base de départ : il permet de parcourir l'arborescence du répertoire à traiter et de garder une trace du parcours effectué.
Programme écrit :
On ajoute à la 'mémoire' de la variable DUMPFULL le nom de chaque répertoire ou fichier parcouru entre deux balises 'fichier'
#/\usr/bin/perl
#-----------------------------------------------------------
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="";
# on initialise la variable fichier pour pouvoir ecrire le contenu du
premier repertoire au debut du sub
my $fichier=$path;
#----------------------------------------
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du
fichier $output1"};
#----------------------------------------
&parcoursarborescencefichiers($rep);
#recurse!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\"
?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Claire Guiraud</NOM>\n";
print FILEOUT
"<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
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) {
$DUMPFULL1.="<repertoire>".$file."</repertoire>"."\n";
next if $file =~ /^\.\.?$/;
$file = $path."/".$file;
if (-d $file) {
&parcoursarborescencefichiers($file);
#recurse!
}
if (-f $file) {
open(FILEINPUT,"$file");
On cherche tous les caractères situés entre deux balises 'description'
$DUMPFULL1.="<fichier>".$file."</fichier>"."\n";
while ($ligne = <FILEINPUT>){
if
($ligne=~/<description>(.*)<\/description>/)
{
On ajoute ce qui a été trouvé à la variable DUMPFULL
$DUMPFULL1.="<contenu>".$1."</contenu>"."\n";
}
}
close(FILEINPUT);
print
$i++,"\n";
}
}
}
#----------------------------------------------
Fichier obtenu : SORTIE.xml
Notes : On observe que le texte ainsi obtenu n'est pas 'propre'. Cela est dû à la présence d'entités html dans les fichiers sources. Il faudra donc 'nettoyer' les données lors de leur extraction.