Page 1 sur 1

[R] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 19:21
par Krakotte
Bonjour à tous,

Dans le cadre d'un projet étudiant j'ai plusieurs centaines de mesures à effectuer sur un logiciel. J'ai décidé d'automatiser ses mesures avec une maccro AutoIt basique.

Le logiciel me sort une valeur que je copie et insert dans une variables pour je puisse la traiter ensuite. Le seul problème est qu'il me sort des variables de deux styles :

"Force : 200.000" ou "Force : 1,600M" (c'est des Newtons).

De là, j'aimerai obtenir 200 000 et 1 600 000 pour pouvoir effectuer mes calculs.
Il faut donc que je supprime le ".", la ",", "Force :" et remplace M par "000".

Je pense qu'une fonction String[...] peut m'aider, mais je ne maitrise pas du tout ce genre de fonction...
Si vous pouviez m'aider à faire le tri dans ma variable ce serait super !

Voici la tête du code :

Code : Tout sélectionner

; mise en route du test

MouseClickDrag("", 971, 658, 991, 675, 0) ; récupération de la force trouvé
Send("^c")
    $Force = ClipGet() 
 [...]
 ......... ; conversion de la variable en un chiffre simple
 [...]

; calculs et sortie de résultat
 

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 20:03
par jguinch
Est-ce que ça te convient ?
► Afficher le texte

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 20:34
par mikell
$string2 = "Force : 1M"
:!:
► Afficher le texte

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 21:06
par jguinch
ah ouais, la je suis pas bon... :roll:

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 21:33
par Krakotte
Merci beaucoup à vous ! J'ai fais plusieurs test de tout les cas possible et la valeur retourné est toujours correct :) Merci vous m'enlevez une belle épine du pied !

A présent j'aimerai comprendre (histoire de me coucher moins bête) :
► Afficher le texte

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 22:54
par mikell
Voilou, with comments :mrgreen:

Code : Tout sélectionner

Func _ExtractNum($sText)
   [color=#00BF00]; remplace tout ce qui n'est [u]PAS[/u] (un chiffre/un point/une virgule/la lettre M) par rien[/color]
   [color=#00BF00] ; c'est le "^" qui marque cette négation, \d = un chiffre[/color]
    Local $out = StringRegExpReplace($sText, "[^\d.,M]", "")
   [color=#00BF00]; dans le résultat, s'il y a la lettre M :[/color]
    If StringInStr($out, "M") Then
        [color=#00BF00]; remplace la virgule (si elle existe) par un point (on obtient alors un décimal en notation EN)
        ; et multiplie ça par 10 puissance 6[/color]
        $out = StringReplace($out, ",", ".")*10^6
    Else
        [color=#00BF00]; sinon supprime le point (s'il existe)[/color]
        $out = StringReplace($out, ".", "")
    EndIf
    [color=#00BF00]; et la fonction retourne le résultat final[/color]
    Return $out 
EndFunc
Note qu'il y a une finesse qui exploite une particularité du fonctionnement interne d'AutoIt en matière de calcul, exemple :

Code : Tout sélectionner

Msgbox(0,"test", "1.5M" * 3)

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 23:27
par jguinch
Je reprends quand même mon code, histoire de finir ce que j'ai commencé :
► Afficher le texte
@Mikell : 1,234 te retourne 1,234 , donc ça risque de poser problème pour un futur calcul :P

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 23:33
par Krakotte
Super ! Merci pour les commentaires je comprend bien mieux :)

Apparement Autoit se fiche d'avoir un M qui traine dans sa variable avant de la multiplier... C'est bon à savoir !

En tout cas merci à vous deux pour votre aide, bonne soirée !

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 23:44
par jguinch
Oui, car une opération sur une chaîne va convertir la chaîne en nombre avant de procéder à l'opération.
La page d'aide de la fonction Number te donnera l'explication sur ce sujet (voir la partie Remarks)

Code : Tout sélectionner

$string = "1234M"
MsgBox(0, "", Number($string) )
 

Re: [..] Extraire les chiffres d'une variable

Posté : dim. 18 oct. 2015 23:56
par jguinch
@Krakotte : merci de passer le sujet en [R] si le problème est résolu.

Re: [..] Extraire les chiffres d'une variable

Posté : lun. 19 oct. 2015 01:05
par mikell
jguinch a écrit :@Mikell : 1,234 te retourne 1,234 , donc ça risque de poser problème pour un futur calcul :P
Ah, on fait le malin maintenant :mrgreen:
Oui, j'avais un tout petit peu (quand même) noté ça mais vu l'échelle des valeurs mentionnées, le risque d'avoir 1,234 Newtons m'a semblé peu probable :roll: