Aller au contenu

Messages recommandés

Posté(e)

Hello tous,

 

Petite question :

 

Je souhaite extraire d'une chaine, le chiffre réel (à virgule).

j'ai lu en long, large, travers et diagonal le site http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html

Je ne trouve pas le pattern qui y correspond.

 

Pour un nombre entier y a pas de soucis :

valeur = valeur:sub(string.find(valeur, "%d+"))

donc pour une chaine comme "17.38 °C" ------> il me retourne 17.

 

Mais moi j'aimerai bien avoir 17.38 !!!

 

Quelqu'un à une idée ?

 

 

Posté(e)

bon avec ceci c'est ok, mais c'est lourd...

if string.match(valeur, "(%d+.%d+)") == nil then
    valeur = string.match(valeur, "(%d+)")
else
    valeur = string.match(valeur, "(%d+.%d+)")
end

 

Posté(e)

Salut @jjacques68,

 

Pour moi aussi les pattern, c'est juste du chinois..la manipulation des chaines e caracteres..une galere pour moi ;-)

 

Ceci alors devrait fonctionner :


 

local t= string.format(%.2f , valeur)

figaro:debug(t)

 

Je suis tombé la dessus ce matin. Des que je cherche des pattern, google est mon ami..et encore..

 

https://fr.wikiversity.org/wiki/Introduction_au_Lua/Fonctions_Texte

Posté(e)

et non :( , le pattern "%.2f" si je me trompe pas permet d'arrondir un chiffre à virgule à 1 (%.1f), 2 (%.2f), 3 (%.3f), ..., valeur après la virgule.

Il n'extrait pas un nombre à virgule d'une string.

En tout cas j'ai essayé et ça plante.

 

Nan mais je pense pas qu'il existe une telle fonction de chaine tout faite pour ça...

 

Donc faut composer, le mixte était ce que j'ai mis plus haut avec ta solution modifié @pepite, et ça fonctionne :

if string.match(valeur, "(%d+.%d+)") == nil then
    valeur = string.match(valeur, "(%d+)")
else
    valeur = string.match(valeur, "(%d+.%d+)")
end

 

  • Upvote 1
  • 2 semaines après...
Posté(e)
local digit = "Vingt-deux 22 et rien d'autre"
local float = "Vingt-deux 22.50 et cinquante"

print(string.match(digit, "[0-9.]+")) --- return 22
print(string.match(float, "[0-9.]+")) --- return 22.50

 

Et voilà

  • Upvote 3
×
×
  • Créer...