jojo Posté(e) le 29 janvier 2023 Signaler Posté(e) le 29 janvier 2023 Bonjour, Je suis honteux, je me sent en mode profiteur ... Cela fait des heures que je tourne mon code dans tous les sens, et que je n'arrive pas à trouver ce qui ne va pas. Je souhaite remplacer le . decimal par un autre charactère. En LUA, c'est la fonction s = string.gsub("Lua is good", "good", "great") print(s)--> Lua is great voici mon code local DeviceProperty = hub.getValue(v.id, ReportProperty) if debugD then self:trace ("Device property = "..tostring(DeviceProperty)) self:trace ("Type of Device property = "..type(DeviceProperty)) end -- test si propiété est numérique - number if type(DeviceProperty) == "number" then DecimalPosition = string.find (tostring(DeviceProperty), ".") DeviceProperty = string.gsub (tostring(DeviceProperty), ".", ReportDecimal) if debugD then self:trace ("Type of Device property = "..type(DeviceProperty)) self:trace ("Decimal position = "..DecimalPosition) end end if debugD then self:trace("Device property = "..tostring(DeviceProperty)) end result = result..Date..ReportSeparator..RoomName.." ("..RoomID..")"..ReportSeparator..DeviceName.." ("..DeviceID..")"..ReportSeparator..tostring(DeviceProperty).."<br>" et une partie du debug associé [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = boolean [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = false [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Salon (221);Est_Noel (839);false [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = 2.0 [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = number [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Type of Device property = string [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Decimal position = 1 [29.01.2023] [13:14:22] [TRACE] [QUICKAPP852]: Device property = ,,, On y voit clairement qu'il a bien déterminé le type de valeur et (et c'est là le problème), que mon string.gsub à remplacé tous les caractère par des , car il a identifié le "." dès la position 1, alors que ça devrait être la position 2. Qu'ai-je mal fait ? Merci
jang Posté(e) le 29 janvier 2023 Signaler Posté(e) le 29 janvier 2023 '.' is a pattern that matches any character. To match against decimal point you need to escape it with a %, use '%.'. But if you just want to replace '.' with ',' and convert to a string just use if type(DeviceProperty) == "number" then DeviceProperty = tostring(DeviceProperty):gsub("%.",",") if debugD then self:trace("Device property = "..DeviceProperty) end end If you want it with a specific number of decimals do -- 2 decimals DeviceProperty = string.format("%.02f",1.0*DeviceProperty):gsub("%.",",") 1 1
jojo Posté(e) le 29 janvier 2023 Auteur Signaler Posté(e) le 29 janvier 2023 THANK YOU, and (of course) it works ! Thank you for explanation why, I could keep searching for a very very long time before finding the solution
Messages recommandés