parcours-arborescence-fichiers-2out.pl

#!/usr/bin/perl
<<DOC;
Votre Nom : DEL SOCORRO Francoise
MARS 2009
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
#-----------------------------------Partie 1: Mémorisation du fichier à explorer------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/" lorsqu'on tape perl parcours-arborescence-fichiers-2out.pl ./arborescence-filsdumonde-2008-tljours-19h/2008 >exit.txt
$rep=~ s/[\/]$//;
#-----------------------------------Partie 2: initialisation des flux de sortie--------------------------------
my $DUMPFULL1="";
my $DUMPFULL2="";
my $DUMPFULLtxt1="";
my $DUMPFULLtxt2="";
#-----------------------------------Partie 3: Balisage des données en XML--------------------------------------
my $output1="sortie-livres-culture.xml"; #initialisation de la sortie XML
open (FILEOUTPUT); #ouverture d'un nouveau fichié associé à la variable FILEOUTPUT
if (open (FILEOUTPUT,">$output1")) #ouverture du flux de sortie pour le XML
{
#----------------------------------------
&parcoursarborescencefichiers($rep); #recurse!
#--------------------------------#Imprime le fichier xml#
print FILEOUTPUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUTPUT "<PARCOURS>\n";
print FILEOUTPUT "<NOM>Del Socorro Françoise</NOM>\n";
print FILEOUTPUT "<FILTRAGE><LIVRES>".$DUMPFULL1."</LIVRES>\n";
print FILEOUTPUT "<CULTURE>".$DUMPFULL2."</CULTURE></FILTRAGE>\n";
print FILEOUTPUT "</PARCOURS>\n";
}
else { die "Pb a l'ouverture du fichier $output1"};
close(FILEOUTPUT);
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)
{
#-----------------------------------Partie 4: Filtreur et nettoyeur pour les fichiers texte--------------------
open(FILEINPUT,"$ARGV[0]");
if (($file=~/0,2-3260,1-0,0\.xml/) || ($file=~/0,2-3246,1-0,0\.xml/))
{
open(FILEINPUT, "$file"); #ouverture d'un nouveau fichié associé à la variable FILEINPUT
open(FILEOUT1,">livres.txt"); #ouverture du flux de sortie pour le fichier livres.txt
open(FILEOUT2,">culture.txt"); #ouverture du flux de sortie pour le fichier culture.txt
$i=1;
print $file, "\n";
#-----------------------------------1#Filtreur
while ($ligne = <FILEINPUT>)
{
if ($ligne=~/<description>([^<]+)<\/description>/) #Le filtreur identifie les lignes qui contiennent cette expression régulière
{
my $recup=$1; #la variable $recup récupère le contenu de la première parenthèse
#-----------------------------------2#Nettoyeur
$recup=~s/&#38;#39;/\'/g;
$recup=~s/&#38;#34;/\"/g;
$recup=~s/&#233;/é/g;
$recup=~s/√©/é/g;
$recup=~s/&#234;/ê/g;
$recup=~s/&amp;eacute;/é/g;
$recup=~s/&amp;egrave;/è/g;
$recup=~s/&amp;euml;/ë/g;
$recup=~s/&amp;ecirc;/ê/g;
$recup=~s/&amp;agrave;/à/g;
$recup=~s/&amp;acirc;/â/g;
$recup=~s/&amp;ccedil;/ç/g;
$recup=~s/&amp;iuml;/ï/g;
$recup=~s/&amp;icirc;/î/g;
$recup=~s/&amp;ugrave;/ù/g;
$recup=~s/&amp;uuml;/ü/g;
$recup=~s/Retrouvez l'ensemble des dépêches sur http:\/\/www\.lemonde\.fr/ /g;
$recup=~s/Chaque mercredi, retrouvez une sélection d'artistes qui font ou feront l'actualité musicale sur la Toile./ /g;
$recup=~s/Toute l'actualité au moment de la connexion/ /g;
$recup=~s/Toute l'actualité au moment de la connexion/ /g;
$recup=~s/&lt;((\w)*(\W*))*&gt;/ /g; #enlève toutes les balises
$recup=~s/\.\.\./ /g; #supprime les points de suspension car on ne peut savoir si il s'agit d'un milieu de ligne ou d'une fin de ligne
$recup=~s/\)/ /g; #enlève toutes les parenthèse fermantes
$recup=~s/\(/ /g; #enlève toutes les parenthèse ouvrantes
$recup=~s/"/ /g; #enlève tous guillemets
if ($file=~/0,2-3260,1-0,0\.xml/) #livres
{
$DUMPFULL1.="<extract num=\"$i\">$recup</extract> \n"; #récupère le fichier xml
$DUMPFULL1=~s/( )*\n( )*\n//g; #supprime les sauts de ligne répétés
$DUMPFULL1=~s/<extract num=\"$i\">( )*<\/extract>//g; #enlève tous les extract répétés
$DUMPFULL1=~s/extract><extract/extract>\n<extract/g; #va à la ligne après chaque balise extract
$DUMPFULLtxt1.="$recup\n"; #récupère le fichier texte
$DUMPFULLtxt1=~s/( )+( )*\n/\n/g; #supprime les doubles espaces en fin de ligne
$DUMPFULLtxt1=~s/\n\n\n//g; #supprime les sauts de ligne impairs
}
else #culture
{
$DUMPFULL2.="<extract num=\"$i\">$recup</extract> \n"; #récupère le fichier xml
$DUMPFULL2=~s/( )*(\n)( )*\n//g; #supprime les sauts de ligne répétés
$DUMPFULL2=~s/<extract num=\"$i\">( )*<\/extract>//g; #enlève tous les extract répétés
$DUMPFULL2=~s/extract><extract/extract>\n<extract/g; #va à la ligne après chaque balise extract
$DUMPFULLtxt2.="$recup\n"; #récupère le fichier texte
$DUMPFULLtxt2=~s/( )+( )*\n/\n/g; # supprime les doubles espaces en fin de ligne
$DUMPFULLtxt2=~s/\n\n\n//g; #supprime les sauts de ligne impairs
}
$i++;
}
}
print FILEOUT1 $DUMPFULLtxt1; #Imprime le fichier livres.txt
print FILEOUT2 $DUMPFULLtxt2; #Imprime le fichier culture.txt
close(FILEINPUT);
close(FILEOUT1);
close(FILEOUT2);
print $i++,"\n";
}
}
}
}
#----------------------------------------------