Extraction d'une chaine - Perl - Programmation
Marsh Posté le 12-09-2005 à 09:40:41
|
[edit]
Merde c'est du perl bon je passe ... mais la regexp devrait être bonne aussi
Marsh Posté le 12-09-2005 à 10:01:34
La regexp est presque identique, oui, dans la second partie du s/// il faut remplacer 1 par $1 pour que ça fonctionne en PERL.
Marsh Posté le 12-09-2005 à 10:13:39
Merci pour vos réponses rapides !
Excuser mon ignorance mais comment faut-il s'en servir ? J'avais commencé par ouvrir le fichier, essayé de trouvé la chaine, puis fermer mon fichier.
Ce code fait-il tout ça ?
Code :
|
J'ai essayé mais j'obtiens ca :
String found where operator expected at C:\wget\test2.pl line 2, near "re 's/.*>
([0-9 ]+)<.*/$1/'"
(Do you need to predeclare re?)
Not enough arguments for index at C:\wget\test2.pl line 2, near "index."
syntax error at C:\wget\test2.pl line 2, near "re 's/.*>([0-9 ]+)<.*/$1/'"
Execution of C:\wget\test2.pl aborted due to compilation errors.
merci encore
Marsh Posté le 12-09-2005 à 10:14:58
C'est pas du perl que je t'ai passé, c'est une commande bash sous nux, te faudra chercher un peu plus et connaitre le perl pour arriver à tes fins.
Marsh Posté le 12-09-2005 à 10:16:45
Non, il t'a donné une commande shell, il avait mal lu l'énoncé (il l'a dit).
Pour utiliser des regexp :
http://perldoc.perl.org/perlre.html
Et pour une réponse plus précise, il va te falloir poster le morceau ad hoc de ton code, là comme ça je ne vois pas comment t'aider.
Marsh Posté le 12-09-2005 à 10:25:29
Elmoricq a écrit : Non, il t'a donné une commande shell, il avait mal lu l'énoncé (il l'a dit). |
merci, j'y jette un oeil. Pour préciser mon idée, je récupère un fichier index.html qui vient d'un site web. Dans ce fichier se trouve l'information (nombre d'annonce) que je souhaite extraire.
Cette extraction doit se faire dans cette partie :
<div class="NbAnnonces" style="padding-top:10px;"> <font color="#2E2C6B"> Aujourd'hui
: <span class="NbAnnonces02"><font color="#2E2C6B">6 541</font></span> annonces</font></div>
<br>
dans ce cas je souhaite extraire le chiffre 6 541
J'ai commencé mon script perl en ouvrant le fichier "index.html" mais la ou je bloque c'est dans la recherche de ce "nombre d'annonce"
Tu comprends mon besoin ?
merci
Marsh Posté le 12-09-2005 à 10:35:14
Elmoricq a écrit : Montre ton code. |
Code :
|
ca va t'aider
Marsh Posté le 12-09-2005 à 10:58:04
jerph a écrit : ca va t'aider |
Oui, c'est bien plus facile pour te montrer comment ça marche :
Code :
|
Marsh Posté le 12-09-2005 à 12:00:37
merci Elmoricq
ton script fonctionne sur le bout de code que tu avais mais y'a quelquechose qui ne correspond pas aux lignes d'origine car sur mon fichier index.html ca ne marche pas. Peut-être que ca vient de ma façon d'avoir poster ce morceau dans le forum :
je recommence différemment :
Code :
|
Pour ma culture, peux-tu m'expliquer ta regexp
merci encore
Marsh Posté le 12-09-2005 à 12:09:46
jerph a écrit : je recommence différemment : |
Ca marche pareil.
jerph a écrit : Pour ma culture, peux-tu m'expliquer ta regexp |
Le souci est que cette expression régulière fait appel à plusieurs notions qu'il serait assez long à expliquer ici, notament sur la "gourmandise" du moteur de regexp.
Je t'encourage à lire la documentation que je t'ai donnée en lien, si tu veux vraiment comprendre en profondeur comment ça fonctionne.
Sinon, en gros, ça ne conserve dans une ligne que le pattern décrit entre parenthèses de la regexp.
Et ce pattern cherche la première occurence dans la ligne de : "au moins (+) un chiffre (\d), suivi de 0 ou plus (*) d'espaces (\s), suivis d'au moins (+) un chiffre (\d), le tout compris entre des caractères '>' et '<' ".
Marsh Posté le 12-09-2005 à 14:50:40
Merci pour tes explications c'est plus claire.
J'ai toujours le soucis avec le fichier brut html.
J'ai rajouté un
Code :
|
et voici ce qu'il affiche :
Code :
|
ce ne serait pas un espace mais un á
j'ai donc essayé de modifier la regexp en remplaçant s par w
Code :
|
mais pas mieux ...
Marsh Posté le 12-09-2005 à 14:53:19
Bizarre ce caractère. Essaie de remplacer "\w*" par "." (un point, tout seul, tout bête).
Marsh Posté le 12-09-2005 à 15:16:17
rien de neuf :
j'ai essayé ça :
Code :
|
ce qui me permet de voir ce qui est considéré comme ligne.
résultat :
Code :
|
j'en déduit que la recherche est effective sur :
Code :
|
J'ai essayé ca aussi, avec \w+ il devrait me trouver 6á053 non ? :
Code :
|
merci encore
Marsh Posté le 12-09-2005 à 17:16:48
bon du nouveau :
avec ca :
if ( $ligne =~ s/.*>(\d+\W\d+)<.*/$1/ )
j'affiche :
6á053
maintenant j'essai de supprimer le caractére "á" dans la chaine
Marsh Posté le 12-09-2005 à 17:29:12
if ( $ligne =~ s/.*>(\\d+)\\W(\\d+)<.*/$1$2/ ) |
Marsh Posté le 12-09-2005 à 17:36:59
Elmoricq a écrit :
|
Ca marche !
Ouf ! merci bien, j'en ai lu de la doc aujourd'hui, j'ai la tête , heureusement que c'est un besoin perso car j'suis pas doué dans le code
merci encore pour ta patience et ta disponibilité
Marsh Posté le 12-09-2005 à 09:34:04
Bonjour à tous !
Voila, je cherche a extraire une chaine de caractères dans un fichier. (nombre d'annonce d'un site)
Extrait de mon fichier qui est en html :
<div class="NbAnnonces" style="padding-top:10px;"> <font color="#2E2C6B"> Aujourd'hui
: <span class="NbAnnonces02"><font color="#2E2C6B">6 541</font></span> annonces</font></div>
<br>
dans ce cas je souhaite extraire le chiffre 6 541
J'en appelle à vos pouvoirs car j'y arrive pas, je liste bien mon fichier mais après
merci