Ci-dessous le script du Perl utilisé pour l’étape 1:
#!/usr/bin/perl
<<DOC;
Guanhua WANG; Audrey CORNU
usage: perl parcours-arborescence-fichiers.pl repertoire-a-parcourir
Entrée: le nom du répertoire contenant les fichiers à traiter
Sortie: un fichier construit structuré contenant sur chaque lignee nom du fichier et le résultat du filtrage: <FICHIER><NOM>du fichier</NOM><CONTENU>du filtrage</CONTENU></FICHIER>
DOC
# le nom du répertoire est passé en argument au programme
my $rep="$ARGV[0]";
# on s'assure que le nom du rep ne se termine pas par un slash, si non, le supprimer
$rep=~ s/[\/]$//;
# initialiser une variable contenant le flux de sortie
my $DUMPFULL1="";
my $DUMPFULL2="";
# ouvrir le fichier de sortie
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1"))
{
die "Pb a l'ouverture du fichier $output1";
}
# lancer le parcours recursif de l'arbre de fils...
my $i=1;
&parcoursarborescencefichiers($rep);#recurse!
# formater la sortie: fichier XML avec en-tete et integrer le contenu de la variable contenant le filtrage
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Guanhua WANG</NOM><NOM>Audrey CORNU<\/NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
my $output2="SORTIE.txt";
open (OUT, ">$output2");
print OUT $DUMPFULL2;
close(OUT);
exit;
# declaration de la procedure du parcours
sub parcoursarborescencefichiers
{
my $path = shift(@_);
# ouvrir le repertoire
opendir(DIR, $path) or die "can't open $path: $!\n";
# recuperer le contenu du rep
my @files = readdir(DIR);
closedir(DIR);
# verifier le statut de chaque element (rep ou fichier)
foreach my $file (@files)
{
next if $file =~ /^\.\.?$/;
# commencer par ecrire le chemin complet de cet element
$file = $path."/".$file;
if (-d $file)
{
# relancer le parcours si l'element est un rep
&parcoursarborescencefichiers($file); #recurse!
}
if (-f $file)
{
# Si fichier: TRAITEMENT a realiser sur chaque fichier (filtrear)
open my $input, "<:encoding(iso-8859-1)", $file;
my $texte = "";
while (my $ligne =<$input>) #filtrage
{
chomp $ligne;
$ligne =~s/\r//g;
$texte = $texte.$ligne;
}
$texte =~ s/> +</></g;
if ($texte =~ /<channel><title>(.+?)<\/title><link>.+?<\/link><description>(.+?)<\/description>.+?<\/url><title>(.+?)<\/title>/)
{
my $TITLE=$1;
my $DESCRIPTION=$2;
my $urltitle=$3;
$DUMPFULL1 = $DUMPFULL1."<abstract>".$TITLE."</abstract>\n"."<description>".$2."</description>\n"."<abstract>".$3."</abstract>\n";
$DUMPFULL2 = $DUMPFULL2.$TITLE."\n".$DESCRIPTION."\n".$urltitle."\n";
}
while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g)
{
my $title=$1;
my $description=$2;
$description =~ s/<.+?>//g;
$title =~ s/&//g;
$title =~ s/\\E9/é/g;
$DUMPFULL1 = $DUMPFULL1."<article numero=\"$i\">\n";
$DUMPFULL1 = $DUMPFULL1."<abstract>".$title."</abstract>\n"."<description>".$description."</description>\n</article>\n";
$DUMPFULL2 = $DUMPFULL2.$title."\n".$description."\n";
$i+=1;
}
close $input;
}
}
}