#/usr/bin/perl <<DOC; Egle Ramdani FEVRIER 2006 Usage : perl filtrage-description.pl repertoire-a-parcourir Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter puis en extrait le contenu des balises <description>. 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 # récupération du nom du répertoire ----------------------------------------------------------- my $rep="$ARGV[0]"; # on s'assure que le nom du répertoire ne se termine pas par un "/" $rep=~ s/[\/]$//; # ouverture et entête du fichier XML ---------------------------------------------------------- open (FILEOUT,">filtrage-out.xml"); print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n"; print FILEOUT "<PARCOURS>\n"; print FILEOUT "<ETIQUETEUR>Egle Ramdani</ETIQUETEUR>\n"; # lancement de procédure qui parcours l'arborescence------------------------------------------- &parcoursarborescencefichiers($rep); # fermeture du fichier XML -------------------------------------------------------------------- print FILEOUT "</PARCOURS>"; close(FILEOUT); exit; # procédure qui parcours une arborescence en recherche des fichiers --------------------------- sub parcoursarborescencefichiers { # récupération du chemin du dossier à parcourir my $path = shift(@_); # ouverture du dossier ou message d'erreur opendir(DIR, $path) or die "Impossible d'ouvrir $path: $!\n"; # lecture du dossier et affectation des items trouvés à un tableau scalaire my @items = readdir(DIR); # fermeture du dossier closedir(DIR); # pour chaque item trouvé on fait le suivant: foreach my $item (@items) { # on donne à l'item le chemin à partir du dossier initial $item = $path."/".$item; # si l'item en question est un dossier, on répète le traitement effectué if (-d $item) { # récursion &parcoursarborescencefichiers($item); } # si l'item en question est un fichier, on appelle une autre procédure # qui traite les fichiers trouvés if (-f $item) { &traitement($item); # on affiche à l'écran le numéro du fichier ayant subi le traitement print $i++,"\n"; } } } # traitement de l'information contenue dans les fichiers--------------------------------------- sub traitement { # récupération du nom de fichier à traiter my $fichier = shift; # ouverture du fichier en lecture open(FILEIN,"$fichier"); # impression du nom du fichier dans le fichier de sortie print FILEOUT "<FICHIER><NOM>$fichier</NOM><CONTENU>"; while (my $ligne = <FILEIN>){ # remplacements pour résoudre les problèmes du codage et du format du fichier if ($ligne=~/<description>([^<]+)<\/description>/) { $des = $1; $des=~s/&\#38\;\#39\;/\'/g; $des=~s/&\#38\;\#34\;/<![CDATA ["]]>/g; $des=~s/&\#233\;/é/g; $des=~s/&\#234\;/ê/g; $des=~s/àª/ê/g; $des=~s/é/é/g; $des=~s/ô/ô/g; $des=~s/è/è/g; $des=~s/Ã/à/g; $des=~s/à§/ç/g; # impression du contenu du balise description traité print FILEOUT "$des"; } } # fin du balise fichier print FILEOUT "</CONTENU></FICHIER>\n"; close (FILEIN); }