Script 3 : parcours de l'arborescence
Aujourd'hui, nous avons intégré notre script dans un script qui parcourt l'arborescence.
Nous avons également ajouté quelques lignes de nettoyage!
Programme :
#/usr/bin/perl
<<DOC;
Votre Nom : Marion ICHE et Sophie PAPAZOGLOU
JANVIER 2008
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
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/" si ça se termine par / on remplace par rien
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie
my $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
&parcoursarborescencefichiers($rep); # on appelle le sous programme
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n"; # on dit que la sortie doit être au format XML
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Marion et Sophie</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers { # on entre dans le sous programme
my $path = shift(@_); # on met dans la variable $path le contenu de la variable mise en argument
opendir(DIR, $path) or die "can't open $path: $!\n"; # opendir : ouvre un rep - si on arrive pas : le pgm s'arrete et on envoie un message d'erreur
my @files = readdir(DIR); # on lit le contenu du répertoire et on renvoie une liste qu'on stocke dans @files
closedir(DIR);
foreach my $file (@files) { # pour chaque ressource dans @files,on crèe $files
next if $file =~ /^\.\.?$/; # on passe au suivant si on trouve . ou .. car on risque une boicle infinie
$file = $path."/".$file; # on réécrit tout le chemin du fichier - le point permet la concaténation
if (-d $file) { # on entre dans cette boucle si il y a dans $file un répertoire (-d vérifie que l'argument est un répertoire)
&parcoursarborescencefichiers($file); #recurse!
}
if (-f $file) { # on entre dans cette boucle si il y a dans $file un fichier (-f vérifie que l'argument est un fichier)
if ($file=~/0,2-3404,1-0,0.xml/){
open(FILEIN,$file); # on ouvre le fichier qu'on va lire
$i=1; # compteur
printf "$file\n"; # on voit si ça travaille
while ($ligne = <FILEIN>){ # tant qu'il y a qqch à lire, on rentre dans la boucle
if ($ligne=~/<description>([^<]+)<\/description>/){ # si on trouve ce motif, on entre dans la boucle
if (($ligne!~/Toute l'actualité au moment de la connexion/) || ($ligne!~/Lisez l'intégralité de l'article pour plus d'information./) || ($ligne!~/Retrouvez l'ensemble des dépêches sur/)) {
my $propre=$1;# on prend le motif et on le met dans $propre
$propre=~s/&#39;/\'/g;# nettoie
$propre=~s/&#34;/\"/g;# nettoie
$propre=~s/é/é/g;# nettoie
$propre=~s/ê/ê/g;# nettoie
$DUMPFULL1.="$propre\n"; # on concatène le contenu de $ propre obtenu dans chaque boucle
# print FILEOUT "contenu de la ligne n°$i : $propre\n"; # on affiche dans le fichier de sortie le motif trouvé et on les numérote avec le compteur
$i++; # on incrémente le compteur
} # fin de if
} # fin de if
} # fin de while
close(FILEIN); # on ferme le fichier en lecture
}
}
}
}
#----------------------------------------------
Sortie :
<?xml version="1.0" encoding="iso-8859-1" ?>
<PARCOURS>
<NOM>Marion et Sophie</NOM>
<FILTRAGE>
Plus le monde rétrécit, plus il devient anxiogène, plus les peuples cherchent à se rassurer en revisitant leur passé.
L'assassinat de Benazir Bhutto compromet l'espoir de démocratisation du pays.
Le philosophe slovène Slavoj Zizek ne veut pas tomber dans le piège du narcissisme culturel qui menace, selon lui, les pays d'Europe de l'Est.
Les temps sont durs pour les apôtres du libéralisme. En quelques mois, Londres, Wall Street, Zurich, les trois places fortes de la mondialisation financière, viennent de lancer d'humiliants SOS à destination d'un adversaire jugé jadis moribond : la bonne vieille puissance publique.
De toutes les idées brassées par Nicolas Sarkozy avant et lors de son élection à la présidence de la République française, les Libanais n'ont retenu qu'une seule : la "rupture" avec la politique suivie par son prédécesseur.
Auteur du "Rivage des Syrtes" et de "Eaux Etroites", Julien Gracq est mort, samedi, à l'âge de 97 ans, a indiqué dimanche son entourage. Rétif aux honneurs, il avait refusé le prix Goncourt en 1951.
La religion a rarement été aussi présente dans une campagne électorale aux Etats-Unis, où les discussions de théologie ont pris le pas sur les orientations économiques.
Pour la première fois dans l'histoire de la Ve République, le chef de l'Etat a présidé une conférence sociale avec les cinq confédérations syndicales représentatives et les trois organisations patronales.
Remarque concernant une autre sortie :
<?xml version="1.0" encoding="iso-8859-1" ?>
<PARCOURS>
<NOM>Marion et Sophie</NOM>
<FILTRAGE>
La profession goûte les avantages du mixage digital.
Les enregistrements du célèbre label de musique classique sont désormais mis en vente sur la Toile.
C'était le concert du siècle où il fallait être. Sur scène Robert Plant, chant, Jimmy Page, guitare, John Paul Jones, basse et claviers, et Jason Bonham, batterie, fils de John, dont la mort, le 25 septembre 1980, avait entraîné la dissolution de la formation britannique.
Plusieurs moteurs mettent en avant la protection des données personnelles.
C'est la première grosse acquisition de l'année dans les nouvelles technologies. Le géant informatique américain Microsoft a annoncé, mardi 8 janvier, qu'il voulait acquérir le moteur de recherche en ligne norvégien Fast Search & Transfer pour 836 millions d'euros.
La bataille des formats de DVD haute définition est en train de tourner à l'avantage du groupe japonais Sony et de son standard Blu-ray, au détriment du HD-DVD développé par son compatriote Toshiba.
On remarque encore une petite erreur de codage à rectifier.
Et voilà !
Nous avons également ajouté quelques lignes de nettoyage!
Programme :
#/usr/bin/perl
<<DOC;
Votre Nom : Marion ICHE et Sophie PAPAZOGLOU
JANVIER 2008
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
#-----------------------------------------------------------
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/" si ça se termine par / on remplace par rien
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie
my $DUMPFULL1="";
#----------------------------------------
my $output1="SORTIE.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
#----------------------------------------
&parcoursarborescencefichiers($rep); # on appelle le sous programme
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n"; # on dit que la sortie doit être au format XML
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Marion et Sophie</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";
close(FILEOUT);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers { # on entre dans le sous programme
my $path = shift(@_); # on met dans la variable $path le contenu de la variable mise en argument
opendir(DIR, $path) or die "can't open $path: $!\n"; # opendir : ouvre un rep - si on arrive pas : le pgm s'arrete et on envoie un message d'erreur
my @files = readdir(DIR); # on lit le contenu du répertoire et on renvoie une liste qu'on stocke dans @files
closedir(DIR);
foreach my $file (@files) { # pour chaque ressource dans @files,on crèe $files
next if $file =~ /^\.\.?$/; # on passe au suivant si on trouve . ou .. car on risque une boicle infinie
$file = $path."/".$file; # on réécrit tout le chemin du fichier - le point permet la concaténation
if (-d $file) { # on entre dans cette boucle si il y a dans $file un répertoire (-d vérifie que l'argument est un répertoire)
&parcoursarborescencefichiers($file); #recurse!
}
if (-f $file) { # on entre dans cette boucle si il y a dans $file un fichier (-f vérifie que l'argument est un fichier)
if ($file=~/0,2-3404,1-0,0.xml/){
open(FILEIN,$file); # on ouvre le fichier qu'on va lire
$i=1; # compteur
printf "$file\n"; # on voit si ça travaille
while ($ligne = <FILEIN>){ # tant qu'il y a qqch à lire, on rentre dans la boucle
if ($ligne=~/<description>([^<]+)<\/description>/){ # si on trouve ce motif, on entre dans la boucle
if (($ligne!~/Toute l'actualité au moment de la connexion/) || ($ligne!~/Lisez l'intégralité de l'article pour plus d'information./) || ($ligne!~/Retrouvez l'ensemble des dépêches sur/)) {
my $propre=$1;# on prend le motif et on le met dans $propre
$propre=~s/&#39;/\'/g;# nettoie
$propre=~s/&#34;/\"/g;# nettoie
$propre=~s/é/é/g;# nettoie
$propre=~s/ê/ê/g;# nettoie
$DUMPFULL1.="$propre\n"; # on concatène le contenu de $ propre obtenu dans chaque boucle
# print FILEOUT "contenu de la ligne n°$i : $propre\n"; # on affiche dans le fichier de sortie le motif trouvé et on les numérote avec le compteur
$i++; # on incrémente le compteur
} # fin de if
} # fin de if
} # fin de while
close(FILEIN); # on ferme le fichier en lecture
}
}
}
}
#----------------------------------------------
Sortie :
<?xml version="1.0" encoding="iso-8859-1" ?>
<PARCOURS>
<NOM>Marion et Sophie</NOM>
<FILTRAGE>
Plus le monde rétrécit, plus il devient anxiogène, plus les peuples cherchent à se rassurer en revisitant leur passé.
L'assassinat de Benazir Bhutto compromet l'espoir de démocratisation du pays.
Le philosophe slovène Slavoj Zizek ne veut pas tomber dans le piège du narcissisme culturel qui menace, selon lui, les pays d'Europe de l'Est.
Les temps sont durs pour les apôtres du libéralisme. En quelques mois, Londres, Wall Street, Zurich, les trois places fortes de la mondialisation financière, viennent de lancer d'humiliants SOS à destination d'un adversaire jugé jadis moribond : la bonne vieille puissance publique.
De toutes les idées brassées par Nicolas Sarkozy avant et lors de son élection à la présidence de la République française, les Libanais n'ont retenu qu'une seule : la "rupture" avec la politique suivie par son prédécesseur.
Auteur du "Rivage des Syrtes" et de "Eaux Etroites", Julien Gracq est mort, samedi, à l'âge de 97 ans, a indiqué dimanche son entourage. Rétif aux honneurs, il avait refusé le prix Goncourt en 1951.
La religion a rarement été aussi présente dans une campagne électorale aux Etats-Unis, où les discussions de théologie ont pris le pas sur les orientations économiques.
Pour la première fois dans l'histoire de la Ve République, le chef de l'Etat a présidé une conférence sociale avec les cinq confédérations syndicales représentatives et les trois organisations patronales.
Remarque concernant une autre sortie :
<?xml version="1.0" encoding="iso-8859-1" ?>
<PARCOURS>
<NOM>Marion et Sophie</NOM>
<FILTRAGE>
La profession goûte les avantages du mixage digital.
Les enregistrements du célèbre label de musique classique sont désormais mis en vente sur la Toile.
C'était le concert du siècle où il fallait être. Sur scène Robert Plant, chant, Jimmy Page, guitare, John Paul Jones, basse et claviers, et Jason Bonham, batterie, fils de John, dont la mort, le 25 septembre 1980, avait entraîné la dissolution de la formation britannique.
Plusieurs moteurs mettent en avant la protection des données personnelles.
C'est la première grosse acquisition de l'année dans les nouvelles technologies. Le géant informatique américain Microsoft a annoncé, mardi 8 janvier, qu'il voulait acquérir le moteur de recherche en ligne norvégien Fast Search & Transfer pour 836 millions d'euros.
La bataille des formats de DVD haute définition est en train de tourner à l'avantage du groupe japonais Sony et de son standard Blu-ray, au détriment du HD-DVD développé par son compatriote Toshiba.
On remarque encore une petite erreur de codage à rectifier.
Et voilà !
Publicité