jjacques68 Posté(e) le 5 juin 2017 Signaler Posté(e) le 5 juin 2017 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 ?
pepite Posté(e) le 5 juin 2017 Signaler Posté(e) le 5 juin 2017 Salut @jjacques68, comme ceci, à tester bien-sûr ;-) local pattern = "(%d+.%d+)" local t= string.match(valeur , pattern) figaro:debug(t) 3
jjacques68 Posté(e) le 5 juin 2017 Auteur Signaler Posté(e) le 5 juin 2017 Bien vu @pepite !!! j'ai tout essayé sauf ça évidemment... Merciiiiii !
jjacques68 Posté(e) le 5 juin 2017 Auteur Signaler Posté(e) le 5 juin 2017 Ha ben non, en fait parce que si la valeur est un nombre entier ça marche plus du coup !!!
jjacques68 Posté(e) le 5 juin 2017 Auteur Signaler Posté(e) le 5 juin 2017 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
pepite Posté(e) le 6 juin 2017 Signaler Posté(e) le 6 juin 2017 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
jjacques68 Posté(e) le 6 juin 2017 Auteur Signaler Posté(e) le 6 juin 2017 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 1
Steven Posté(e) le 15 juin 2017 Signaler Posté(e) le 15 juin 2017 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à 3
pepite Posté(e) le 15 juin 2017 Signaler Posté(e) le 15 juin 2017 Ben voila, facile non ? Easy master @Steven MERCI
jjacques68 Posté(e) le 16 juin 2017 Auteur Signaler Posté(e) le 16 juin 2017 Ça... c'est fait. Foutu pattern... ... ... Merci !!!
Messages recommandés