| 
 | 
Здравствуйте, гость ( Вход | Регистрация )
|   | 
| 
 | 
|  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 Спасибо сказали: 777 раз  | 
				Превращает строку 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 | 9 589 | 1.3.2017, 11:16 Посл. сообщение: Iskandark | 
|  | Функция обновления списка пользователей ...или её альтернатива | 2 | AlphaOmega | 6 625 | 4.7.2009, 19:08 Посл. сообщение: AlphaOmega | 
|  |  Функция Удаления помогите дописать функцию | 3 | yMka | 7 470 | 13.2.2009, 14:53 Посл. сообщение: yMka | 
|   | Сейчас: 27.10.2025, 4:31 |