Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы Разработчикам Скриптов, вопросы по скриптам (мелкие вопросы) |
29.12.2011, 1:25
Сообщение
#841
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, заранее не парься.
Пиши скрипт спокойно. Вот когда появятся проблемы, тогда и будем решать. И да, ты смотри моё предыдущее сообщение, я там подправил кое-что. |
|
|
29.12.2011, 1:33
Сообщение
#842
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
|
|
|
29.12.2011, 1:42
Сообщение
#843
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Код Stroka:sub(3,4) - тут от строки Stroka выделяется кусок от 3-го по 4-е число символов.Для изучаемого числа 0.141592654 это будет пропуск первых двух символов "0." и захват цифр "14" из "141592654" Можно брать и отрицательные значения для этих аргументов: Код Stroka:sub(3,-4) - тут у нас захватятся с 3-го по 4-е с конца, то есть, получим число "141592"Знак минус при аргументе означает - с конца строки. |
|
|
29.12.2011, 10:09
Сообщение
#844
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Такой метод округления не хорошо использовать, так как возможен вариант, когда целая част состоит не из одной цифры, а например из 2 или 3
Код n = 356.3695876 Лучше использовать функцию format: Код string.format("%.3f", 356.3695876) -- 356.370
|
|
|
29.12.2011, 18:47
Сообщение
#845
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Setuper, ты не был внимателен, и, возможно, не всё читал выше (возможно, читал только последнее сообщение).
1. Я и этот метод тоже предлагал: Цитата MIKHAIL, а ещё есть это: Код local Pi = 3.141592654 -- твоё обрабатываемое число local sUnit = "" -- единица измерения, в данном случае пусто (а может быть и метр, и процент и что угодно) Core.SendToAll(string.format("%0.2f %s", Pi, sUnit)) -- где 2f - нужное число знаков после запятой, то есть, 2 в данном случае 2. И там же второй метод, его я предложил только чтоб записать, раз уж пришёл в голову (не пропадать же методу). Да и вдруг ему покажется прощё. К тому же, при чем тут Цитата когда целая част состоит не из одной цифры, а например из 2 или 3 ?Целая и дробная части обрабатываются по отдельности, предварительно выделив их функцией Код local M, N = math.modf(Pi) Далее уже работаем с целой частью любого размера и с дробной в виде "0.123456789"
|
|
|
29.12.2011, 21:52
Сообщение
#846
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну по-моему всё равно корявый метод.
Кстати, вот ещё пара методов тогда до кучи: Код function floor(num, precision)
precision = math.pow(10, precision) return math.floor(tonumber(num) * precision + 0.5) / precision end function ceil(num, precision) precision = math.pow(10, precision) return math.ceil(tonumber(num) * precision - 0.5) / precision end floor(456.456556, 3) -- 456.457 ceil(456.456556, 3) -- 456.457 |
|
|
30.12.2011, 21:14
Сообщение
#847
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Скажите, пожалуйста, возможно как-либо предоставить в локальной сети пользователям хаба доступ в Интернет (расшарить, вообщем), который есть на машине, на которой стоит хаб, разумеется, основной упор сделать на реализацию посредством Lua, по возможности без сторонних программ (WinGate/UserGate и т.п.)? Если будут необходимы такие монстры как MySQL/PHP – ничего, поставим. Допустим с таким вариантом: каждый месяц 10-ти пользователям хаба предоставлять по 50 МБ трафика. Быть может с учётом трафика не так всё просто будет, как вариант организовать сессии с возможностью ограничения по времени, либо предоставить определённое количество переходов/запросов. Скорость работы не так важна, сколько сама возможность раздавать Интернет, предположительно данная фишка хаба предполагает работу с почтой (посмотреть, отправить), само собой, немного посерфить по сайтам...
Предполагаю, что реализовать можно по-разному, но хотелось бы услышать дельные советы. |
|
|
30.12.2011, 22:27
Сообщение
#848
|
|
Местная ТехПоддержка Группа: Администраторы Сообщений: 1 875 Регистрация: 18.7.2008 Из: Моск. Обл, г. королев, район Болшево Пользователь №: 221 Спасибо сказали: 220 раз |
будут необходимы такие монстры как Linux + дельная биллингсистема. Например раньше юзал Traffpro (щас она закрылась, но на рутрекере есть от меня раздача со стабильным релизом)
|
|
|
31.12.2011, 3:54
Сообщение
#849
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Столкнулся с данными в кодировке UTF-8 (если не ошибаюсь):
Код "\u041d\u0430\u0443\u043a\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438" Функция Utf8ToAnsi (Сообщение #1) ранее работала исправно, но и данные, как мне кажется, были предствлены "по-другому" (без \u), хотя, вроде как, тоже были в кодировке UTF-8. Теперь вышеуказанная функция, естественно, уже не работает. Слабо я в этом пока разбираюсь. Подскажите, пожалуйста, что изменилось, ведь и раньше кодировка была той же? |
|
|
31.12.2011, 9:26
Сообщение
#850
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Код "\u041d\u0430\u0443\u043a\u0430 \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438" == "Наука и технологии" |
|
|
31.12.2011, 15:12
Сообщение
#851
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Enyby, так функцию Utf8ToAnsi (Сообщение #1) реально подправить, чтобы она вновь заработала, но уже с Unicode-последовательностью?..
|
|
|
31.12.2011, 19:13
Сообщение
#852
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Реально все. Это лишь вопрос времени и ресурсов.
Это не кодировка. Это способ эйскепирования символов юникода в кодировках, его не поддерживающих. В данном конкретном случае надо разбить шестнадцетиричное число, идущее после "/u", на две части, перевести эти части в байты. Полученная последовательность байт будет юникодом, который можно прогнать через Utf8ToAnsi. |
|
|
1.1.2012, 22:19
Сообщение
#853
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Скажите, пожалуйста, какой вариант кода в данном случае будет быстрее работать?
Вариант №1: Код local sData1 = "0" local sData2 = "0" или вариант №2: Код local sData1 = "0" local sData2 = sData1 Слышал, что есть копирование по значению и по ссылке. Вот, интересуюсь... И ещё такой вопрос. Быть может показаться пустым, но всёже хочется узнать подробнее, глубже, чтоли. Есть ли, опять же, в данном случае разница (существенная, на глубинном уровне) в коде и какова в данном случае? Вариант №1: Код local sData = "0" Вариант №2: Код local sData = 0 Понимаю, что можно присвоить, заключив только в кавычки, то не присвоишь без них... Но тут строго одно и то же значение – "ноль". А вот кавычки влияют на работу кода? Где-то видел мельком разницу между одинарными и двойными, не обратил внимания. Теперь ищу.) |
|
|
1.1.2012, 23:19
Сообщение
#854
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Это не принципиально.
Оба варианта достаточно быстры, а различия между ними минимальны. |
|
|
2.1.2012, 0:46
Сообщение
#855
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Согласно Сообщение #1, п. 4 нижеуказанная замена подпадает под этот метод оптимизации? А именно, имеющийся код:
Код local data = string.sub(data,1,-2) заменить на: Код local data = data:sub(1,-2)
|
|
|
2.1.2012, 1:45
Сообщение
#856
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, ты копаешься на таком микроскопическом уровне, что разница твоих вариантов может себя проявить, только если она повторится миллион раз подряд..что в том твоём сообщении, что в этом.
|
|
|
3.1.2012, 1:50
Сообщение
#857
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Вопрос: есть ли существенная разница между
Код function GetData(sData) и Код GetData = function(sData) ??? |
|
|
3.1.2012, 2:16
Сообщение
#858
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Это вопрос или утверждение?
ADD: Согласно Сообщение #1, п. 4 нижеуказанная замена подпадает под этот метод оптимизации? А именно, имеющийся код: Код local data = string.sub(data,1,-2) заменить на: Код local data = data:sub(1,-2) Тест Код: Код function ChatArrival(tUser, sData) local iLimit = 10000000 local sData = 'Sample text' local sResult= ''; local iStart = os.time() for i = 0, iLimit, 1 do sResult = string.sub(sData, 1, -2) end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); iStart = os.time() for i = 0, iLimit, 1 do sResult = sData:sub(1, -2) end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); end Результат: Код [00:57:07] * 11 [00:57:07] * 9 Вывод: ООП вариант быстрее (это тот, который через двоеточие). PS Если охота заниматься "блошиной" оптимизацией, то пиши сам подобные скрипты и проверяй что быстрее, не так уж они и сложны. И да, "выигрыш" нереально "крут" - 2/10 000 000 секунд с одного оператора на моей машине. Так что не стоит заморачиваться. ADD: Скажите, пожалуйста, какой вариант кода в данном случае будет быстрее работать? Вариант №1: Код local sData1 = "0" local sData2 = "0" или вариант №2: Код local sData1 = "0" local sData2 = sData1 Тест Код: Код function ChatArrival(tUser, sData) local iLimit = 100*1000*1000 local sData1 = '' local sData2 = '' local iStart = os.time() for i = 0, iLimit, 1 do sData1 = "0" sData2 = "0" end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); iStart = os.time() for i = 0, iLimit, 1 do sData1 = "0" sData2 = sData1 end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); end Результат: Код [01:08:04] * 15 [01:08:04] * 18 Вывод: Первый вариант быстрее. На три секунды. При 100 миллионном повторении. Есть ли, опять же, в данном случае разница (существенная, на глубинном уровне) в коде и какова в данном случае? Вариант №1: Код local sData = "0" Вариант №2: Код local sData = 0 Тест Код: Код function ChatArrival(tUser, sData) local iLimit = 30*1000*1000 local iData1 = '' local iData2 = 0 local iStart = os.time() iData2 = "0" for i = 0, iLimit, 1 do iData1 = "1" iData2 = iData2 + iData1 end Core.SendToAll(iData2 .. " " .. os.difftime(os.time(), iStart)); iStart = os.time() iData2 = 0 for i = 0, iLimit, 1 do iData1 = 1 iData2 = iData2 + iData1 end Core.SendToAll(iData2 .. " " .. os.difftime(os.time(), iStart)); end Результат: Код [01:14:33] *30000001 18 [01:14:33] *30000001 6 Вывод: Если у вас число, то быстрее будет как число. Не будете лишний раз конвертировать. |
|
|
3.1.2012, 2:36
Сообщение
#859
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Enyby, спасибо, что уделяете на такие вопросы своё драгоценное время. Теперь хоть знать буду, как составлять и тестить простейшие, но в то же время изящные алгоритмы!
|
|
|
3.1.2012, 2:43
Сообщение
#860
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Вопрос: есть ли существенная разница между Код function GetData(sData) и Код GetData = function(sData) ??? Тест Код: Код function ChatArrival(tUser, sData) local iLimit = 10*1000*1000 local iStart = os.time() for i = 0, iLimit, 1 do function GetData(sData) sData = "0" end end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); iStart = os.time() for i = 0, iLimit, 1 do GetData = function(sData) sData = "0" end end Core.SendToAll(" " .. os.difftime(os.time(), iStart)); end Результат: Код [01:40:49] * 10 [01:40:49] * 11 Вывод: Все естественно. Во втором случае создается безымянная функция, которая присваивается в переменную, а во втором случае, все то же самое, только функция имеет имя сразу. На этом и выигрыш. |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 3:49 |