03.01.2020, 17:33
The thing you ask for is not easly possible. Try this script, it automatically tag objects based on its name. It use defined separators to define tag from name.
Code:
seperators = '.,_ =+'
-- Start address of objects (min: 0/0/1 = main/sub/address)
start_main = 0
start_sub = 0
start_address = 1
-- End address of objects (max: 31/7/255 = main/sub/address)
end_main = 15
end_sub = 7
end_address = 255
------------------------------------------ End Parameters ------------------------------------------
------------------------------ DON'T CHANGE ANYTHING UNDER THIS LINE -------------------------------
function split(source, delimiters)
local elements = {}
local pattern = '([^'..delimiters..']+)'
string.gsub(source, pattern, function(value) elements[#elements + 1] = value; end);
return elements
end
-- Calculate start address to DB format
start_objectaddress = ((start_main * 2048) + (start_sub * 256) + start_address)
-- Calculate end address to DB format
end_objectaddress = ((end_main * 2048) + (end_sub * 256) + end_address)
-- Get all objects from DB
all_objects = db:getall('SELECT address, name, tagcache FROM objects')
for _, object in ipairs(all_objects) do
-- Check if object is inside given range
if object.address >= start_objectaddress and object.address <= end_objectaddress then
currentrowaddress = object.address
myobject = grp.find(currentrowaddress)
nameTable = split(myobject.name, seperators) --spliting object string in to table
-- log(nameTable)
for _, tag in ipairs(nameTable) do
tagvalue = tag
-- Check if object tag already exists inside DB
current_object_tag = db:getall('SELECT object, tag FROM objecttags WHERE object = ' .. currentrowaddress .. ' AND tag = "' .. tagvalue .. '"')
object_tagcache = db:getone('SELECT tagcache FROM objects WHERE address = ' .. currentrowaddress .. '')
if #current_object_tag == 0 then
-- Add object to table objecttags
db:insert('objecttags', {object = currentrowaddress, tag = tagvalue, })
-- Check if object already has other tag values inside DB and add new values to tagcache
if object_tagcache == nil or object_tagcache == "" then
db:update('objects', { tagcache = tagvalue }, { address = currentrowaddress })
else
tag_string = "" .. object_tagcache .. ", " .. tagvalue .. ""
log(tag_string)
db:update('objects', { tagcache = tag_string }, { address = currentrowaddress })
end
end
end
end
end
script.disable(_SCRIPTNAME)
------------------------------
Ctrl+F5
Ctrl+F5