Aller au contenu

string.gsub()


Messages recommandés

Posté(e)

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

Posté(e)

'.' 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("%.",",")

 

  • Like 1
  • Thanks 1
Posté(e)

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

×
×
  • Créer...