#/usr/bin/perl <$output0")) { die "Could not open $output0"}; close(FILEOUT); # sortie xml my $output1="$rubrique-surface.xml"; if (!open (FILEOUT,">$output1")) { die "Could not open $output1"}; #---------------------------------------- début fichier xml print FILEOUT "\n"; print FILEOUT "\n"; print FILEOUT "Manying Zhang\n"; close (FILEOUT); #---------------------------------------- # Appel à une procédure (précédé par le symbole "&" ) &parcoursarborescence($rep); #---------------------------------------- open (FILEOUT,">>:encoding(utf-8)", $output1); print FILEOUT "\n"; close(FILEOUT); exit; #----------------------------------------------------------------------------------------------- # sous-programme sub parcoursarborescence { # Le nom du dossier passé comme argument est stocké dans une variable my $dossier = shift(@_); # Ouverture du dossier opendir(DOSSIER, $dossier) or die "Could not open $dossier: $!\n"; # Liste des fichiers contenus dans ce dossier my @files = readdir(DOSSIER); closedir(DOSSIER); # Traitement de chaque fichier foreach my $file (@files) { # Ignorer les éléments cachés next if $file =~ /^\.\.?$/; # Reconstruction du chemin absolu de l'élément $file = $dossier."/".$file; # -d permet de savoir si l'objet est un répertoire (directory) ou pas // si c'est le cas on regarde son contenu if (-d $file) { print " ==> ",$file,"\n"; &parcoursarborescence($file); #recurse! print " ==> ",$file,"\n"; } # -f permet de savoir si l'objet est un fichier (file) ou pas if (-f $file) { # si c'est xml, c'est la SURFACE, on fait le traitement if ($file =~/$rubrique.+\.xml$/) { print "<",$i++,"> ==> ",$file,"\n"; # imprime le nom de fichier précédé par un compteur // permet de vérifier dans la ligne de commande qu'on traite bien les bons fichiers $codage = "utf-8"; open (FIC, "<:encoding($codage)", $file); open (OUT, ">>:encoding($codage)", "$rubrique-surface.txt"); open (OUT2, ">>:encoding($codage)", "$rubrique-surface.xml"); #ramener tout le flux textuel de FIC sur une seule ligne my $texte=""; # lecture du fichier ligne par ligne while (my $ligne = ) { # supprime le retour à ligne chomp $ligne; # regex pour retrouver les retours à la ligne $ligne =~ s/\r//g; $texte = $texte . $ligne; } close FIC; # supprime les blancs à l'extérieur des balises $texte =~ s/>\ +(.+?)<\/title>.+?<description>(.+?)<\/description>/g){ $texte =~m/<item><title>([^<]+?)<\/title><link>(?:[^<]+?)<\/link><description>([^<]+?)<\/description>/g) { my $titre = $1; my $description = $2; $titre=~s/<.+?>//g; # nettoyage $titre.="."; # ajout d'un point à la fin de chaque titre $titre=~s/\?\.$/\?/; #s'il y a un point d'exclamation ou d'intérrogation avant, on enlève le point final $description=~s/<.+?>//g; # nettoyage if (!(exists $dico{$titre})) { # si la ligne n'est pas déjà dans le dico, on l'ajoute au fichier de sortie $dico{$titre} = 1; print OUT "$titre\n"; print OUT "$description\n"; print OUT2 "<item>\n<title>$titre\n$description\n\n"; } } close OUT; close OUT2; } } } }