[R] StringInStr versus StringRegExp

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

[R] StringInStr versus StringRegExp

#1

Message par mystere »

Bonjour je recherche un nombre décimaux dans une page source. Je vérifie don via un StringInstr si le code est trouvé se qui a l’avantage en cas de crache de serveur de ne pas retourné une erreur Autoit. Tous vas bien il trouve le code. Mais lorsque je fais un StringRegExp pour retrouver le nombre décimaux qui change, il me retourne une erreur comme quoi il n’a pas trouvé le texte recherché.

Voici mon code source.

Code : Tout sélectionner

If StringInStr($source, $id[$for][0] & @LF &@TAB & @TAB & "</td>" & @LF & @TAB & @TAB & '<td style="text-align:center;">' & @LF & @TAB & @TAB & @TAB) Then
MsgBox(4096, "", "trouvé.")
$trouve = StringRegExp($source, $id[$for][0] & @LF &@TAB & @TAB & "</td>" & @LF & @TAB & @TAB & '<td style="text-align:center;">' & @LF & @TAB & @TAB & @TAB & "[[:digit:].]")
Voici ce que je recherché dans la page en rouge le numéraux décimal.

Code : Tout sélectionner

id[$for][0]
        </td>
        <td style="text-align:center;">
            [color=#FF0000]0.000[/color]
Ou est l'erreur ?

Merci de me répondre.
Modifié en dernier par mystere le lun. 20 juin 2011 17:31, modifié 1 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..]StringInStr fonctionne / StringRegExp ne fonctionne

#2

Message par jchd »

C'est très fragile de compter les LF et Tab dans du html, car les serveurs peuvent envoyer des séquences très variables.
Par contre ça fonctionne :
► Afficher le texte
Attention, le contexte n'est pas assez dicriminant. Ancre-toi sur un nom de classe ou litéral unique. Aussi, il faut borner ta recherche car tu risques peut-être d'avoir des <\td> et <td style="text-align:center;"> à profusion dans une page, sans que ce soit ceux qui t'intéressent. C'est la raison de la présence des {0,20}
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..] StringInStr versus StringRegExp

#3

Message par mystere »

Merci de ta response jchd. sa fonctionne !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] StringInStr versus StringRegExp

#4

Message par jchd »

Je précise pourquoi il faut se méfier terriblement de tenter une correspondance stricte sur les espacements en HTML.
Sur les gros site, ce n'est pas un serveur qui répond, mais une (ou plusieurs) "ferme" de serveurs. De ce fait, il est généralement peu probable de tomber sur le même serveur physique quand on fait deux requêtes identiques, même à quelques secondes d'intervalle. Un coup c'est un rack dans une baie de Frankfort qui répond, le coup suivant, ça peut très bien être Atlanta qui nous cause.

Les serveurs ne sont pas forcément tous au même niveau pour différentes couches logicielles, loin de là. Par ailleurs, l'espacement, dans tout le html (sauf les zones affichables chez le client) est très permissif et le contenu renvoyé passe par bien des couches. Une page peut très bien être envoyée en une seule ligne ou en 12000, ne comporter aucun espace (non client) ou un tab, cinq espaces ou toute autre combinaison entre deux éléments.
On peut donc s'attendre à voir des variations énormes dans les espacements et c'est bien ce qu'il arrive sur certains sites.

C'est pour ça que l'extraction de données à grands coups de regexps est fragile. Préférer les fonctions _IE quand c'est possible.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre