Функция exclude(str,str), Разбивает строку на подстроки по строке и возвращат массив параметров |
Здравствуйте, гость ( Вход | Регистрация )
Функция exclude(str,str), Разбивает строку на подстроки по строке и возвращат массив параметров |
23.4.2009, 14:29
Сообщение
#1
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Функция exclude(str,str)
Разбивает строку на подстроки по строке и возвращает массив подстрок Хочу |
|
|
23.4.2009, 14:35
Сообщение
#2
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код string.exclude = function(self, str)
return {self:match(("(.*)(%s)(.*)"):format(str))} end |
|
|
26.4.2009, 12:45
Сообщение
#3
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Что-то я не понял как её использовать =\
|
|
|
26.4.2009, 12:56
Сообщение
#4
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
кажись так надо)))
Код strl=exclude(str,stre) да и вообще зачем лишние действия Код function test(str,stre)
local strl= exclude(str,stre) DC():MessageBox(strl[1]..strl[2],"HubsID","yes","question") end |
|
|
26.4.2009, 15:56
Сообщение
#5
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Спасибо!
Код function test(str,stre) local strl=str:exclude(stre) DC():MessageBox(strl[1]..strl[2],"HubsID","yes","question") end Я здесь обнаружил что функция нестабильна: /lua test("a-_b-_c-_e-_f","-_") -- вернет "a-_b-_c-_e-_" Она вобще работает тока с stre=" " и все =\ |
|
|
26.4.2009, 16:30
Сообщение
#6
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
мне кажется как то не так работает функция, ибо возвращает она таблицу но в ней не то что нужно!
вот код Код function OnStartup() test("a-_b-_c-_e-_f", "-_") end function test(str,stre) local strl = {} strl = str:exclude(stre) for i,v in pairs(strl) do Core.SendToAll(i.." "..v) end end string.exclude = function(self, str) return {self:match(("(.*)(%s)(.*)"):format(str))} end а вот результат Цитата [17:26:31] 1 a-_b-_c-_e
[17:26:31] 2 -_ [17:26:31] 3 f |
|
|
26.4.2009, 19:52
Сообщение
#7
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Превращает строку ValString типа «ы, ы1, ы5, ы6» в массив. Sep — разделитель элементов © X-Disa,
Код 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 |
|
|
26.4.2009, 23:23
Сообщение
#8
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
пардон, я на скорую руку писал
|
|
|
27.4.2009, 11:12
Сообщение
#9
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
Спасибо всем!
Думаю тему можно удалить и перенести функцию в тему: "склад полезных функций" 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 |
|
|
27.4.2009, 12:43
Сообщение
#10
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Немного оптимизированный вариант:
Код 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; |
|
|
27.4.2009, 14:49
Сообщение
#11
|
|
Участник Группа: Пользователи Сообщений: 47 Регистрация: 20.4.2009 Пользователь №: 3 112 Спасибо сказали: 1 раз |
И все же:
/lua test("_+a_+b_+c_+d","_+") -- (strl[1]..strl[2]..strl[3]..strl[4]) -- вернет abc /lua test("a_+b_+c_+d","_+") -- (strl[1]..strl[2]..strl[3]..strl[4]) -- вернет abcd ... |
|
|
27.4.2009, 15:15
Сообщение
#12
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
1) /lua test("_+a_+b_+c_+d","_+") -- (strl[1]..strl[2]..strl[3]..strl[4]..strl[5]) -- вернет abcd
2) /lua test("a_+b_+c_+d","_+") -- (strl[1]..strl[2]..strl[3]..strl[4]) -- вернет abcd Код -- 1) strl[1] = "" strl[2] = "a" strl[3] = "b" strl[4] = "c" strl[5] = "d" -- 2) strl[1] = "a" strl[2] = "b" strl[3] = "c" strl[4] = "d" Если не нравится наличие пустой строки, то достаточно заменить Код table.insert(ret, pref) на Код if pref ~= '' then table.insert(ret, pref) end
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
Функция Core.SetUserInfo Работает только в UserConnected? |
6 | Iskandark | 8 428 | 1.3.2017, 11:16 Посл. сообщение: Iskandark | |
Функция обновления списка пользователей ...или её альтернатива |
2 | AlphaOmega | 6 052 | 4.7.2009, 19:08 Посл. сообщение: AlphaOmega | |
Функция Удаления помогите дописать функцию |
3 | yMka | 6 801 | 13.2.2009, 14:53 Посл. сообщение: yMka |
|
Сейчас: 27.11.2024, 3:28 |