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/&#39;/\'/g; $recup=~s/&#34;/\"/g; $recup=~s/é/é/g; $recup=~s/é/é/g; $recup=~s/ê/ê/g; $recup=~s/&eacute;/é/g; $recup=~s/&egrave;/è/g; $recup=~s/&euml;/ë/g; $recup=~s/&ecirc;/ê/g; $recup=~s/&agrave;/à/g; $recup=~s/&acirc;/â/g; $recup=~s/&ccedil;/ç/g; $recup=~s/&iuml;/ï/g; $recup=~s/&icirc;/î/g; $recup=~s/&ugrave;/ù/g; $recup=~s/&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/<((\w)*(\W*))*>/ /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"; } } } } #----------------------------------------------