function array_explode(ValString,Sep) if (string.find(ValString,Sep,1,false)) then local retarr = {} local s = 1 local e = 0 local fnd = "" local snd = "" local iii = 0 ValString = ValString..Sep while (s) do s,e,fnd = string.find(ValString,"(.-)"..Sep.."+",e+1,false) if (fnd ~= nil and fnd ~= "") then table.insert(retarr,fnd) end iii = iii + 1 end return retarr else return {ValString} end end
Автор: Setuper 26.4.2009, 23:23
пардон, я на скорую руку писал
Автор: zangriEBP 27.4.2009, 11:12
Спасибо всем! Думаю тему можно удалить и перенести функцию в тему: "склад полезных функций"
CODE
string.explode = function (ValString,Sep) if (string.find(ValString,Sep,1,false)) then local retarr = {} local s = 1 local e = 0 local fnd = "" local snd = "" local iii = 0 ValString = ValString..Sep while (s) do s,e,fnd = string.find(ValString,"(.-)"..Sep.."+",e+1,false) if (fnd ~= nil and fnd ~= "") then table.insert(retarr,fnd) end iii = iii + 1 end return retarr else return {ValString} end end
Автор: Setuper 27.4.2009, 12:43
Немного оптимизированный вариант:
Код
string.explode = function(self, Sep) self = self..Sep local ret, pref, suff = {}, self:match(("(.-)%s+(.*)"):format(Sep)) while pref do table.insert(ret, pref) pref, suff = suff:match(("(.-)%s+(.*)"):format(Sep)) end return ret end
Я так понимаю, что данная функция нужна была для разбора команд протокола. Вот похожая функция моего скрипта :
Код
--[[ \fn self:Cmds(sData, sId, iIp, sNick) * \bref Partition the received command * \param sData - cmd, sId - user's id, iIp - user's ip, sNick - user's nick * \return true or false ]] Cmds = function(self, sData, sId, iIp, sNick) sData = sData.."|" local pref, suff = sData:match"(.-)|+(.*)" while pref do if not self:Cmd(pref, sId, iIp, sNick) then return false end pref, suff = suff:match"(.-)|+(.*)" end return true end;