• Добро пожаловать на Quest3D - Русскоязычное сообщество.
 

Lua Script вместо Count string occurences of text1 in text2 (text1, text2)

Автор DimiS, 21 июня 2010, 15:51:02

« назад - далее »

DimiS

Столкнулся тут на днях с таким глюком, что ValueOperator Count string occurences of text1 in text2 (text1, text2) не всегда работает правильно в моем квесте версии 4.3, потратил много нервов. Там всё очень странно получалось он мог сработать пару раз потом пару раз не сработать, и т.д.
В общем, если вдруг кто-то столкнётся с подобным то вот есть решение написанное на луа, пользоваться точно так же как и оператором

function GetValue()
delimiter = channel.GetChild(0):GetText()
text = channel.GetChild(1):GetText()
if string.find("", delimiter, 1) then -- check for empty delimiter
return 0
end

res = 0
pos = 1
while true do
local first, last = string.find(text, delimiter, pos)
if first then
res = res + 1
pos = last + 1
else
break
end
end

return res
end

dfx

Привет, DimiS.

Как дополнение - вариант оператора, опубликованного тобой, но помедленнее и не глючит с поиском в строке кол-ва копий знака '.' (твой, почему то возвращает общее кол-во символов, если искать точку):


function GetValue()
delimiter = channel.GetChild(0):GetText()
text = channel.GetChild(1):GetText()
local pos=0
local res=0
local tMax1 = string.len(delimiter)
local tMax2 = string.len(text)
while pos<tMax2 do
if string.sub(text,pos+1,pos+tMax1)==delimiter then
res = res + 1
pos = pos+tMax1
else
pos = 1 + pos
end

end
return res
end