[R] Expression Régulière = c'est pas mon truc. Help me.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

[R] Expression Régulière = c'est pas mon truc. Help me.

#1

Message par corrs78 »

Bonsoir,
Je viens demander votre aide, car je n'arrive pas a maîtriser les expressions régulières.
Alors si une âme charitable pouvait m'ecrire le code (commenté si possible). Ca me permettrait de progresser dans mon programme.

Il faut que j'isole les 2 coordonnées GPS dans cette ligne : (il me faut seulement les 'Digits' et le 'point')

Code : Tout sélectionner

Your IP: 82.000.00.102<br>Please, this is only for test, use with moderation! If you want to get the PHP source code: <a href="http://www.witracks.com.br/gmaps.txt">http://www.witracks.com.br/gmaps.txt</a><br>l    o n     =    78.462173 <br> l A     T    = 17.416467
Voici mon début de code :

Code : Tout sélectionner

$line = FileReadLine(@ScriptDir & "\source_witracks.html",1)
$resultat = StringRegExp($line, '(\d{2}).(\d{6})')
ConsoleWrite($resultat)
 
Merci à vous pour votre contribution.
Modifié en dernier par corrs78 le lun. 16 janv. 2012 09:59, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#2

Message par Tlem »

Vos coordonnées pouvant sans doute être de la forme :
XX.XXXXXX ou X.XXXX, il vaut mieux adopter ce type de pattern :

Code : Tout sélectionner

#include <Array.au3>

$line = FileReadLine(@ScriptDir & "\source_witracks.html",1)
$resultat = StringRegExp($String, '(\d{1,2}.\d{4,6})', 3)

_ArrayDisplay($resultat)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#3

Message par corrs78 »

Merci Tlem. Encore une fois tu me sors de la panade.

le {1,2} veut dire de 1 à 3 caractères (dans ce cas, des chiffres) ? c'est bien ça ?

Une précision, la coordonnée peut-être négative, dans ce cas il y aura un moins ' - ' devant (ça se complique).
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#4

Message par Tlem »

Oups, j'avais oublié le signe négatif ...

Code : Tout sélectionner

$resultat = StringRegExp($String, '(\x2d{0,1}\d{1,2}.\d{4,6})', 3)
\x2d signifie uniquement le caractère 0x2d en hexa qui correspond au signe moins.
{0,1} indique de 0 à 1 caractère (donc le caractère peut être absent !!!).
\d signifie uniquement un nombre et {1,2} de 1 à 2 nombres. Pour le dernier segment {4,6} de 4 à 6 nombres. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#5

Message par mikell »

@Tlem
Pour mon instruction personnelle : cette expression est-elle valable ?

Code : Tout sélectionner

$resultat = StringRegExp($String, '(-?\d+.\d{4,})', 3)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#6

Message par Tlem »

Dans l'absolu oui. Mais je limiterais le premier bloc à deux nombres maxi et le dernier bloc à 6 nombres maxi. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#7

Message par Iste »

et moi j’échapperai le point
Signez ici
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#8

Message par corrs78 »

Tlem a écrit :Oups, j'avais oublié le signe négatif ...

Code : Tout sélectionner

$resultat = StringRegExp($String, '(\x2d{0,1}\d{1,2}.\d{4,6})', 3)
\x2d signifie uniquement le caractère 0x2d en hexa qui correspond au signe moins.
{0,1} indique de 0 à 1 caractère (donc le caractère peut être absent !!!).
\d signifie uniquement un nombre et {1,2} de 1 à 2 nombres. Pour le dernier segment {4,6} de 4 à 6 nombres. ;)
Merci, j'ai tout compris. C'est vraiment puissant les ExpReg :shock:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#9

Message par Tlem »

En prenant en compte les remarques précédentes, l'expression suivante semble plus adaptée et 'filtrante' :

Code : Tout sélectionner

$resultat = StringRegExp($String, '(-?\d{1,2}\.\d{4,6})', 3)
-? étant identique à \x2d{0,1}
et
l’échappement du point par \. afin d’éviter que 78x12345 ne match une réponse possible. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#10

Message par corrs78 »

Merci à tous. Une dernière chose, je viens de remarquer que le site est capable de me renvoyer des réponses curieuses ou il inverse la latitude et la longitude. D'ailleurs, il écrit latitude et longitude d'une façon aléatoire.
voici deux réponses bien différentes :
Comment est-est ce que je peux renvoyer dans mon tableau la latitude en premier.
Je pense qu'il faut se baser sur le caractère "t ou T"

L .... O n= -4.697196 <br> L At ... = 36.498759
L .. a T = 36.498759<br> L o .. N = -4.697196

(les .... sont en fait des 'espaces' qui sont eux aussi générés de façon aléatoires. Le vrai casse tête !
Là c'est complètement hors de mes compétences.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#11

Message par Tlem »

Hé bien dites donc, j'espère que vous n'allez pas rajouter des contraintes toutes les 5 minutes ...

Bon, voici une solution comme une autre :
► Afficher le texte
Je ne doute pas qu'il soit possible de le faire plus simple, mais au moins ça fonctionne. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
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: [..] Expression Régulière = c'est pas mon truc. Help me.

#12

Message par jchd »

Une intervertion optionnelle de captures est malaisée en RE, mais voilà ce qu'on peut faire, qui doit couvrir tous les cas envisagés :

Code : Tout sélectionner

Local $aHtml[4] = [ _
    'Your IP: 82.000.00.102<br>Please, this is only for test, use with moderation! If you want to get the PHP source code: <a href="http://www.witracks.com.br/gmaps.txt">http://www.witracks.com.br/gmaps.txt</a><br>l    o n     =    78.462173 <br> l A     T    = 17.416467', _
    'Your IP: 82.000.00.102<br>Please, this is only for test, use with moderation! If you want to get the PHP source code: <a href="http://www.witracks.com.br/gmaps.txt">http://www.witracks.com.br/gmaps.txt</a><br>      lo    n      =    78.462173 <br>   LA t    = 17.416467', _
    'Your IP: 82.000.00.102<br>Please, this is only for test, use with moderation! If you want to get the PHP source code: <a href="http://www.witracks.com.br/gmaps.txt">http://www.witracks.com.br/gmaps.txt</a><br> l A     T    = -17.416467<br>l    o n     =    -78.462173 ', _
    'Your IP: 82.000.00.102<br>Please, this is only for test, use with moderation! If you want to get the PHP source code: <a href="http://www.witracks.com.br/gmaps.txt">http://www.witracks.com.br/gmaps.txt</a><br>lon=    178.462173    <br>    l A  T= -0.4167   ' _
]
Local $lon, $lat, $Pos
For $html In $aHtml
    $html = StringStripWS($html, 8)
    $Pos = StringRegExp($html, "(?i:<br>lon=(-?\d*\.\d+)<br>lat=(-?\d*\.\d+)|<br>lat=(-?\d*\.\d+)<br>lon=(-?\d*\.\d+))", 1)
    If Not @error Then
        If UBound($Pos) = 2 Then
            $lon = Number($Pos[0])
            $lat = Number($Pos[1])
        Else
            $lon = Number($Pos[3])
            $lat = Number($Pos[2])
        EndIf
    Else
        ; position non trouvée
        $lon = "Nan"
        $lat = "Nan"
    EndIf
    MsgBox(0, "Position", "Lat = " & $lat & @LF & "Lon = " & $lon)
Next
 
NB : la longitude va de -180° à 180°, donc sur trois chiffres. J'ai opté pour la possibilité que le site ne produise pas de zéro avant la virgule pour les angles < 1° en valeur absolue (e.g. -.12345 au lieu de -0.12345)

Edit : ai coupé dans la viande pour simplifier le pattern.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..] Expression Régulière = c'est pas mon truc. Help me.

#13

Message par corrs78 »

Merci à tous ça fonctionne.
Répondre