Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
26.11.2009, 20:11
Сообщение
#641
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Хранение в памяти (ОЗУ). Загрузка с диска при старте скрипта. Сброс на диск только при остановке скипта и бэкап время от времени.
|
|
|
27.11.2009, 1:30
Сообщение
#642
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Народ! Ввиду неких очередных выложенных функций, хочу снова поднять тему кушанья одного процента в строках с %% функциями типа gsub и format. Если я не прав - поправьте меня, но я решаю проблему вот так:
Код string.ogsub = string.gsub string.gsub = function(sData, pattern, repl, n) if type(repl) == "string" then return string.ogsub(sData, pattern, function(s) return repl end, n) end return string.ogsub(sData, pattern, repl, n) end string.oformat = string.format string.format = function(self, ...) local t = {...} for k, v in ipairs(t) do self = self:gsub("%%s", v, 1) end return self end Я понимаю, что format теряет многие функции и становится тупым инструментом, но обычно по другому назначению он и не используется, а если такое и присутствует, надо к примеру не целое число отформатировать, тогда уже приходится переименовывать функцию и пользоваться другой, в некоторых моих скриптах есть этот костыль: Код function Return(sData) if type(sData) == "function" then return sData end return function() return sData end end string.g = function(sData, s1, s2) return sData:gsub(s1, Return(s2)) end Что скажете об этом, вот примеры, имеем мы код Код string.dbformat = function(self, ...) без костылей мы имеем строку длинной 14 символов и получаем столько же после форматирования, хотя первая %s должна замениться на 3 символа, а вторая вообще на 5, в итоге стока должна прибавить 4 символа и получиться в длинну 18 символов (14-(2*2)+3+5=18). С костылями этого не происходит и мы на выходе имеем нашу строку с 18 символами...local t = {...} for k, v in ipairs(t) do t[k] = tostring(v):gsub("(['\\\"])", "\\%1") end return self:format(unpack(t)) end local sss = "%%%%%%%%'\"%s%s" Core.SendToAll("sss = "..sss.." len = "..sss:len()) sss = sss:dbformat("1%%", "2%%%%") Core.SendToAll("sss:dbformat = "..sss.." len = "..sss:len()) Может оптимизируете или еще что-то подскажете, ведь проблема не простая |
|
|
27.11.2009, 2:12
Сообщение
#643
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Да уж проблемка.
НУ чтож, будем выяснять суть))) |
|
|
27.11.2009, 2:27
Сообщение
#644
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Вопрос скорее в том что делать и как быть, то что проценты надо экранировать самими же процентами это понятно, а вот как сделать лучше и удобней всего чтобы избавиться от проблемы?
|
|
|
27.11.2009, 3:04
Сообщение
#645
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Выходов из данной ситуации 2:
1) Код local sss = "%%%%%%%%'\"" sss = (sss:gsub("%%", "%%%%").."%s%s"):dbformat("1%%", "2%%%%") Core.SendToAll("sss:dbformat = "..sss.." len = "..sss:len()) 2) Код local sss = "%%%%%%%%%%%%%%%%'\"%s%s" sss = sss:dbformat("1%%", "2%%%%") Core.SendToAll("sss:dbformat = "..sss.." len = "..sss:len()) То есть либо до вставки строки в метод формат удваивать проценты, либо самому формировать строку с удвоенными процентами. Лучше наверное второй способ. Ведь как правило запросы мы сами определяем в программе, и они как правило постоянные. Если же запросы определяются только в процессе (динамически), то первый способ спасёт)) Как правило в запросах у нас вообще нету процентов: Код ("INSERT INTO `table` VALUES ('%s', '%s', '%s')"):dbformat(a, b, c) Вообще-то, написанный пример не очень подходит для использования метода dbformat. Думаю для примера нужно так написать: Код local sss = "qwerty%s%s" Ведь мы экранируем символы в параметрах (a, b), а не в самом запросе. В запросе нам всё известно, поэтому мы там пишем всегда всё корректно, а вот в параметрах может быть всё, что угодно.local a, b = "\\%%%", "\"\\'" sss = sss:dbformat(a, b) Core.SendToAll("sss:dbformat = "..sss.." len = "..sss:len()) Возможно я до конца не понял суть проблемы, но на данный момент (после написания поста) у меня сложилось впечатление, что проблемы как таковой и нету. Или всё же есть? Давайте расставим все точки над и |
|
|
3.12.2009, 18:40
Сообщение
#646
|
|
Освоившийся участник Группа: Пользователи Сообщений: 226 Регистрация: 11.11.2009 Пользователь №: 4 990 Спасибо сказали: 18 раз |
1
|
|
|
3.12.2009, 19:27
Сообщение
#647
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Найди отличия между твоим кодом и вот этим:
Код function UserConnected(tUser) Core.SendToUser(tUser,"$UserCommand 1 3 »»» Информация\\Правила хаба$<%[mynick]> !rules||".. "$UserCommand 1 3 »»» Информация\\Друзья хаба$<%[mynick]> !friends||".. "$UserCommand 1 3 »»» Информация\\Адреса хаба$<%[mynick]> !adress||".. "$UserCommand 1 3 »»» Информация\\инфа тут например$<%[mynick]> !команда||") end RegConnected,OpConnected=UserConnected,UserConnected Смотри очень внимательно. И слово адрес по английски пишется с удвоенной буквой d: address |
|
|
5.12.2009, 16:27
Сообщение
#648
|
|
Освоившийся участник Группа: Пользователи Сообщений: 226 Регистрация: 11.11.2009 Пользователь №: 4 990 Спасибо сказали: 18 раз |
1
Причина редактирования: Капс
|
|
|
6.12.2009, 21:38
Сообщение
#649
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 1 Регистрация: 6.12.2009 Пользователь №: 5 288 Спасибо сказали: 0 раз |
Уж не осилил все. Поиском не нашел, может не так набирал. В общем, есть функции для случайного выбора?
|
|
|
6.12.2009, 21:51
Сообщение
#650
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Есть, тут функции API хаба Ptokax, тебе же надо функцию луа, так что написал не туда, но все равно вот (взято
Цитата math.random ([m [, n]])
Эта функция является интерфейсом к простейшему генератору псевдослучайных чисел rand, предоставляемому ANSI C. (Нет никаких гарантий по поводу его статистических свойств.) При вызове без аргументов, возвращает псевдо-случайное действительной число в интервале [0,1). При вызове с аргументом m, math.random возвращает псевдослучайное целое число из отрезка [1, m]. При вызове с двумя аргументами – m и n, math.random возвращает псевдослучайное целое число из отрезка [m, n]. |
|
|
9.12.2009, 6:21
Сообщение
#651
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 4 Регистрация: 6.12.2009 Пользователь №: 5 281 Спасибо сказали: 0 раз |
Подскажите пожалуйста, в Ptokax 0.4.1.1 в клиенте greylink05995 в окошке скачиваний стало появляться "Проверка клиента..." ботом, размер -1 Байт. Как бы от этого избавиться?
|
|
|
13.1.2010, 5:03
Сообщение
#652
|
|
Продвинутый участник Группа: Пользователи Сообщений: 162 Регистрация: 19.8.2009 Из: Москва Пользователь №: 4 201 Спасибо сказали: 24 раза |
|
|
|
13.1.2010, 8:30
Сообщение
#653
|
|
Продвинутый участник Группа: Пользователи Сообщений: 177 Регистрация: 20.5.2008 Пользователь №: 5 Спасибо сказали: 26 раз |
|
|
|
10.2.2010, 17:06
Сообщение
#654
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
А подскажите пожалуйста функцию которая записывает сообщение в лог (в отдельный *.txt файл)
Если быть точным... Мне надо записывыть ..msg в лог |
|
|
10.2.2010, 17:20
Сообщение
#655
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
|
|
|
10.2.2010, 21:46
Сообщение
#656
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Привет!
Ситуация такая. Немного переделал скрипт антирекламы (убрал из неё антимат) Ну и так получаеться, что я не всегда прибываю на хабе, И я решил сделать запись в лог системного сообщения о рекламе. Ну знаете интересно порой, что рекламят, а может и вовсе не реклама была... И почему то реклама отправленная в личку (PM) Записываеться в лог с | символом в конце строки. Хотелось бы знать в чём собственно дело, Потому что запись о рекламе в лог из главного чата записываеться нормально. Log.txt Цитата [GC][10.02.2010 в 21:31] <DrakonSP> [10.71.9.149] dchub [PM][10.02.2010 в 21:32] <DrakonSP> [10.71.9.149] dchub| [PM][10.02.2010 в 21:35] <DrakonSP> [10.71.9.149] dchub| Скрипт [attachment=4056:Anti_Advertising.lua] |
|
|
10.2.2010, 21:49
Сообщение
#657
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
потому что каждая строка заканчивается этим символом! если не хочешь чтоб он записывался предварительно его надо обрезать!
|
|
|
10.2.2010, 22:01
Сообщение
#658
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Как это сделать?
И почему запись лога из главного чата коректно пишеться |
|
|
10.2.2010, 22:16
Сообщение
#659
|
|
Освоившийся участник Группа: Администраторы Сообщений: 344 Регистрация: 2.6.2008 Из: RB,Ufa Пользователь №: 8 Спасибо сказали: 106 раз |
RecLog:write("[PM]["..os.date("%d.%m.%Y в %H:%M").."] <"..user.sNick.."> ["..user.sIP.."] "..msg:sub(1,-2).."\n")
|
|
|
10.2.2010, 22:27
Сообщение
#660
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Jaska
Спасибо помогло, но всё равно интересно, а почему тогда лог главного чата норм пишеться? Там же не обрезано ничего... |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 6:02 |