HTML::Parser, balises avec attribut [Résolu] - Perl - Programmation
Marsh Posté le 23-06-2011 à 16:50:06
Bon, j'ai fait des modifs et un test rapide:
Code :
|
1) Si tu voulais les attributs, il fallait passer "tagname, attr" au handler de start.
2) Faut faire un shift pour chacun de tes arguments, un (a, b) = shift ne devrait remplir que a a priori je crois.
3) Faut ajouter un cas particulier quand tu as le TD avec l'attribut voulu pour detecter ça et accumuler le texte dans le handler par défaut (ici: TD1)
Il y a peut être d'autres moyens de faire ça avec ce module, mais je ne le connais pas bien.
Bon, il te reste plus qu'à parser correctement chaque ligne de @personnes pour en extraire les champs.
A+,
Marsh Posté le 23-06-2011 à 22:11:00
On voit bien que tu n'y connais rien.
Perl est beaucoup plus puissant et pratique que sed awk et autres (le jours ou j'ai découvert Perl, il y a plus de 20 ans, j'ai pu réécrire en un seul fichier simple une usine à gaz en script, sed, awk et autres dont plein de fichiers temporaires, que je faisais pour l'INRIA).
Pour parser du texte structuré ou pas, et la, c'est ce qu'il fait, il y a pas plus pratique que Perl.
A+,
Marsh Posté le 23-06-2011 à 22:21:58
gilou a écrit : On voit bien que tu n'y connais rien. |
Hmm pas la peine de le prendre personnellement... Je posais juste une question.
Et puis c'est normal qu'avec un "vrai langage" on ait plus de fonctionnalité et d'alternative qu'avec une simple commande (ou du sh) Mais dans beaucoup de cas un sed suffit, pas besoin de re-coder un parser a la main.
Marsh Posté le 23-06-2011 à 22:40:35
Ah désolé si c'était juste une question. Je pensais que c'était une remarque sur un ton ironique.
Mais la il ne recode pas un parser, il en utilise un tout fait (use HTML::Parser) il associe juste quelques actions certains tokens reconnus par le parser.
Et dans les cas ou appeler sed suffit, bien souvent, c'est plus facile a coder en perl sur une ligne et a appeler comme on ferait pour sed.
A+,
Marsh Posté le 24-06-2011 à 12:49:12
Merci pour ton aide et tes explications Gilou, je n'en demandais pas autant, ça fonctionne parfaitement.
Marsh Posté le 24-06-2011 à 13:42:54
Juste un point de détail, évites d'appeler une routine perl avec &f();
f() est la manière moderne (et a moins que tu utilises un perl préhistorique, ça doit marcher), et l'appel &f(); désactive certaines fonctionnalités (la vérification des types des paramètre passés si la routine a un prototype à sa déclaration par exemple).
A+,
Marsh Posté le 24-06-2011 à 14:09:04
Ok merci .
J'ai encore un soucis ... j'aimerais supprimer tous les   des éléments de mon tableau.
J'ai essayé ceci mais cela ne va pas .
Code :
|
Marsh Posté le 24-06-2011 à 14:35:01
Chez moi, ça marche, donc ton pb est ailleurs.
Code :
|
Fais aussi attention au fait que ta transformation va transformer 40 5140 en 405140, ce qui n'est peut être pas ce que tu désires.
s/\ (\ )*/ /g; serait peut être plus adapté.
A+,
Marsh Posté le 24-06-2011 à 14:47:42
Encore merci, c'était tout bêtement une faute de frappe.
Pas de problème pour la transformation, car je supprime les   (pas le ; qui me servira de délimiteur).
Marsh Posté le 23-06-2011 à 13:50:07
Bonjour,
Je dois parser un fichier HTML afin de récupérer les valeurs entre <td>, mais seulement quand le td est suivi de l'attribut align="left" --> <td align="left">.
J'ai récupéré sur le web un code utilisant HTML::Parser et tenté de l'adapter mais en vain.
Il me retourne le contenu de tous les td et pas seulement ceux contenant l'attribut left.
Voici une partie du code :
L'HTML :
Pouvez-vous m'aider s'il vous plait ?
Merci
Message édité par Gavrinis le 28-06-2011 à 10:22:52