Logic Machine Forum
Easiest way to get datatype string - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Easiest way to get datatype string (/showthread.php?tid=4146)



Easiest way to get datatype string - Hadeel - 13.07.2022

Hi !
I want to get a datatype of each object as "dt.bool" or "dt.bit2".

When I use the function grp.find('0/1/0').datatype,  it gives me a number like 1, 2, not a datatype string.
Is there a mapping table somewhere so that I can get a datatype string as "dt.bool" or "dt.bit2" ?
For now I am trying to create a mapping table like this below but I am not sure if all of them are correct.
Is there any other way?


Code:
local convertToString = {
    [1] = "dt.bool",
    [2] = "dt.bit2",
    [3] = "dt.bit4",
    [4] = "dt.char",
    [5] = "dt.uint8",
    [6] = "dt.int8",
    [7] = "dt.uint16",
    [8] = "dt.int16",
    [9] = "dt.float16",
    [10] = "dt.time",
    [11] = "dt.date",
    [12] = "dt.uint32",
    [13] = "dt.int32",
    [14] = "dt.float32",
    [15] = "dt.access",
    [16] = "dt.string",
}



RE: Easiest way to get datatype string - admin - 13.07.2022

Use this example. It also handles sub-datatypes which don't have a dt table entry (e.g. 01.011 -> dt.bool).
Code:
mapping = {}
for key, value in pairs(dt) do
  mapping[ value ] = 'dt.' .. key
end

obj = grp.find('1/1/2')
dpt = obj.datatype
if dpt then
  dtname = mapping[ dpt ]

  if not dtname and dpt >= 1000 then
    dtname = mapping[ math.floor(dpt / 1000) ]
  end
end

log(dtname)



RE: Easiest way to get datatype string - Hadeel - 13.07.2022

Thank you very very much admin !!

It's working perfect (: