Bonjour,
Je suis débutant en Perl et j'ai l'impression d'être confronté à un problème simple pour tout le monde, mais que je n'arrive pourtant pas à détordre ; aussi j'espère que vous aurez cinq petites minutes pour m'expliquer ce qui ne va pas dans ma démarche.
En gros, je cherche à appliquer un ensemble de traitements à un ensemble de fichiers contenus dans un seul répertoire.
Ces traitements se résument (pour le moment) en deux subroutines simples qui permettent l'identification de la plus grosse font-size d'un document HTML et d'en ramener une portion de texte utile (le titre du document, le postulat étant que les plus gros caractères sont dans le titre).
Ces subroutines fonctionnent très bien sur les fichiers que j'ai testé et j'ai donc souhaité les appliquer successivement à ces mêmes fichiers contenus dans un répertoire unique.
Mon intention était d'utiliser un glob pour identifier les fichiers et leurs chemins d'accès, ce qui a l'air de fonctionner, mais leur ouverture par la suite semble poser problème - j'ai des résultats intranscriptibles sur mon premier fichier (il semble donc bien être lu), juste leur nom pour les autres.
J'ai cherché partout (FAQ, cours, etc) pour en savoir plus sur le maniement du glob (j'ai aussi essayé avec opendir et readdir, pour tomber sur les mêmes résultats) et je ne trouve pas de solution à mon problème, depuis une semaine que je suis dessus. J'espère que vous pourrez m'aider, en pardonnant les erreurs éventuellement grossières du débutant que je suis.
Voici le code (nb : tout ça est censé tourner sous Windows) :
Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 $max=0; $SOURCE = "C:/toto/pouet/atraiter/*.htm"; #lire et stocker le nom des fichiers foreach (glob ($SOURCE)) { push(@listfic, $_); } #pour chaque fichier retrouvé, lancer l'exécution des subroutines foreach $entree (@listfic) { print "$entree\n"; max(); titre(); } #identifier les font-size sub max { open IN,"< $entree" or die "On cherche encore, ce fichier n'existe po...\n"; while(<IN>) { chomp; if (/font-size[\D]*${max}[^>]+>([^<]+)/) { print "$1\n"; } if ($1>$max){ $max=$1; } } close IN; } #extraire le titre, avec un peu de slurping pour ne pas s'encombrer des retours à la ligne sub titre { local ($/, *IN); open IN,"< $entree" or die "On cherche encore, ce fichier n'existe pas...\n"; while(<IN>){ chomp; if (/font-size: $max\D\D\W\W.*;\W\W([^<]+)/){ print "$1\n"; } } close IN; }
Partager