Dennis_Chikin 3 665 Опубликовано 4 Января 2015 Поделиться Опубликовано 4 Января 2015 (изменено) С чего начинать и где взять. Установка Lua:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=629106 Руководство «Программирование на языке Lua», третье издание:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905308 Изменено 2 Марта 2015 пользователем Kirgudu Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-905371
Artos 99 Опубликовано 9 Июня 2012 Поделиться Опубликовано 9 Июня 2012 (изменено) Struck, чем тебе мануалы по Lua не угодили, что читаешь нечто в C языках? Все расписано по полочкам, хотя конечно же языком тех, кто все же в общей теме. Уж если тебе непонятно "найденное вхождение", то без технического переводчика (т.е. на язык чайников в технических текстах) тебе будет не просто ... ;-) "найденное вхождение" - упрощенно: содержит ли строка искомый символ и соответственно сам символ и место в строке, где этот символ найден. Твой патерн вероятно означает (хотя зависит от метода к которому применяется): Требуется вернуть от конца строки 1 и не более символ не равный пробелу. Т.е. если в конце строки имеется один символ после и/или пробела(ов) или даже без пробелов - он и будет "найден". Изменено 9 Июня 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706154
Struck 61 Опубликовано 9 Июня 2012 Поделиться Опубликовано 9 Июня 2012 (изменено) чем тебе мануалы по Lua не угодили, что читаешь нечто в C языках? А...невнимательность, действительно - нашел, почитаю. Почитал(бегло) не нашел описания значения символов(*.$) Выяснил, что ^ означает что поиск начинаем с начала строки. Уж если тебе непонятно "найденное вхождение", то без технического переводчика (т.е. на язык чайников в технических текстах) тебе будет не просто ... ;-) Действительно...забыл погуглить Твой патерн вероятно означает (хотя зависит от метода к которому применяется): (string.gsub(str, "^%s*(.-)%s*$", "%1")) Вот мой код собственно...и из паттерна мне понятно только ^%s - эта часть.(Начинаем поиск с начала строки) Изменено 9 Июня 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706156
Кактус_523 1 Опубликовано 9 Июня 2012 Поделиться Опубликовано 9 Июня 2012 ^%s*(.-)%s*$ ^ Ищем от начала строки. %s* Пропускаем пробельный символ один и более раз. (.-) Захватываем первый встретившийся любой символ один и более раз. %s* Пропускаем пробельный символ один и более раз. $ Конец. Непонятно как оно вообще работает. По мне, так паттерн бредовый. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706157
Artos 99 Опубликовано 9 Июня 2012 Поделиться Опубликовано 9 Июня 2012 (изменено) Мда-а-а, вопросы ты тоже задавать пока не научился. Как ты думаешь, будет ли кто-то отвечать на подобное: "Я вот тут, не зная буковок, написчал чАвото, не подскажете каков смысл мною написанного?" 1. Задавать вопрос нужно по сути, т.е. указывать цель, а не давать кусок своего, зачастую неверного, предположения/решения и прося раз'яснить то, чего порою и невозможно раз'яснить. 2. Раз нашел мануал - почитай его не бегло! Все там найдешь. 3. "Волшебные символы" порой имееют не одно значение, которые зависят и от контекста и от места ... Символ '^' может означать и "с начала строки" и "не", т.е. указываемые в маске символу НЕ должне встречаться, ну и т.п. 4. "Твой" код - опять кастрирован, и как минимум должен иметь начало, типа: my_string = string.gsub(str, "^%s*(.-)%s*$", "%1"), т.е. идет итерация по заданной строке (str) и результат замены возвращается в my_string. Добавлено через 4 мин.: Кактус_523 один и более любой символ пишут так: '.+' %s* - означает ни одного или более (чем один), т.е. пробелов может и не быть вовсе. и согласен, патерн, да еще для gsub, бредовый. ;-) Изменено 9 Июня 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706158
Кактус_523 1 Опубликовано 9 Июня 2012 Поделиться Опубликовано 9 Июня 2012 Запамятовал. Я их и не использую практически. Нужды не возникало. По поводу покурить вот Составлял в виде памятки для себя на основе одной хорошей статейки с теперь уже мертвого сайта. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706161
Struck 61 Опубликовано 10 Июня 2012 Поделиться Опубликовано 10 Июня 2012 Artos, ответил бы...да флуд разжигать не хочется, код писал кстати не я, мне просто дали функцию и я хотел бы разобраться в ней. да еще для gsub Почему "да еще"...а какие паттерны для него НЕбредовые? function trim(str) return (string.gsub(str, "^%s*(.-)%s*$", "%1")) end function explode(str, sep) local pos, t = 1, {} if #sep == 0 or #str == 0 then return end for s, e in function() return string.find(str, sep, pos) end do table.insert(t, trim(string.sub(str, pos, s-1))) pos = e+1 end table.insert(t, trim(string.sub(str, pos))) return t end Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706221
Кактус_523 1 Опубликовано 10 Июня 2012 Поделиться Опубликовано 10 Июня 2012 (изменено) а какие паттерны для него НЕбредовые? Написанные с умом. P.S.: Вообще не мешало бы сформулировать свой вопрос. Ну и описать как должна работать функция. А то бывает написано одно, а автор хотел совсем другое. Изменено 10 Июня 2012 пользователем Кактус_523 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706234
Artos 99 Опубликовано 10 Июня 2012 Поделиться Опубликовано 10 Июня 2012 (изменено) Struck, флудить мы все горазды, а вот по сути спрашивать иль отвечать - сей факт становится все реже и реже ... ;-( 1. Если тебе захотелось разобраться, то почему ты считаешь, что предварительное чтение материалов по теме - не обязательно, и можно напрямую просить растолковать то, что расписано специально для тех, кто хочет разобраться? 2. Твоей функции уже пять лет как исполнилолось и взята она (trim) из AMK-мода. Провда тот кто тебе ее дал заодно и тамошнюю функцию explode привел скорее также к бредовой форме, чем к улучшению. Бредовость патерна именно для gsub в том, что этот метод по определению обрабатывет строку от начала и до конца (читаем мануал!), т.о. бессмысленно задавать символы "от начала" и "до конца". Уже давно имеется на форумах (и этом тоже) и в модах нормальная замена: function trim(str) if str and str ~= '' then return str:match('^%s*(.*%S)') or '' --/> end return '' --/> end Возврат пустой строки избавляет от фатальных ошибок в случае, если строка содержит одни пробелы, что "дорабатанная" explode пропустит на ура, т.к. при наличии только пробелов условие #str == 0 как раз не отсекает подобные строки ... Отсекать нужно именно пустые строки или имеющие только пробелы, ну да это уже по-контексту стоящей задачи делается. Ну а "бредовость" в нынешнем виде функции explode в том, что достаточно бессмысленная связка условий: if #sep == 0 or #str == 0 then return end почти ничего не отсекает, кроме забытых иль явно ошибочных входных аргуметтов, а вот то, что отсекая - ничего(!) не возвращает, скорее привнесет бОльше фатальных ошибок. Исходно, explode должна возвращать таблицу, пустую или заполненну, а не nil (хотя конечно и это зависит от контекста). Ну и нашпигование внутри функцией string.find (которая уже по выходу игры устарела в Lua) в цикле - вызывает улыбку и недоумение. В общем толковать подобное бессмысленно, хотя и работает кое-как, но зачем так сделано - только автор сего кода может растолковать. Изменено 10 Июня 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706248
Nazgool 250 Опубликовано 10 Июня 2012 Поделиться Опубликовано 10 Июня 2012 (изменено) Что означает сей pattern? "^%s*(.-)%s*$" Ответы конечно правильные по результату. Я хотел бы хотел пояснить некоторые особенности. Дело в том, что символ звёздочки "*" вообще находится на особом счету, и работает он по-особому. Задав, ну хотя бы такой паттерн - "^%s*", строка сначала считывается ЦЕЛИКОМ!, а затем от конца строки начинается поиск совпадений (его ещё называют "прожорливым"). И не важно что вначале стоит символ "циркумфлекс". Сначала строки поиск всё равно производится не будет. Только от конца. Изменено 10 Июня 2012 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706278
Artos 99 Опубликовано 10 Июня 2012 Поделиться Опубликовано 10 Июня 2012 (изменено) Дам все же иную трактовку нашим ответам и принесу извинения команде АМК, написавшим исходную связку функций, которую кто-как курочит и корежит: Исходная связка trim + explode задумывалась достаточно многофункциональной и имела на входе помино собственно разделяемой строки и разделителя (обычно по-запятой ',') еще и флаг clear, т.е. чистить от пробелов или нет. К сожалению, тяга к упрощениям в названиях и трактовках превратила trim в синоним "чистка от пробелов". Однако, назначение вышеупомянутого патерна и результат на выходе - очистка от начальных и конечных пробелов, т.е. очистка строки/линии, а не слова. Вот тут как раз и играют важную роль '^' и '$' уточняющие, что следует чистить ТОЛЬКО от начала и от конца. Все привыкли, что в задаваемой строке для разделения идет типа: ab, cd, ef, ... что естественно и приводит к выводу о "бредовости" применения начального и конечного спец.символов, однако в том же АМК-моде (например, в интерактивных.новостях) для разделения использовались строки типа: a b, c d e, f g, ... т.е. требовалось делить именно только по разделителю и убирать начальные и завершающие пробелы, оставляя связки слов (темный сталкер, зеленый новичек, ...) именно неоазделенными. Исходная trim как раз выполняла задачу как trim_line, а не как trim_word, хотя на порядок проигрывает в производительности указанному выше эквиваленту. А вообще, без указания задачи для чего служит патерн, довольно глупо спрашивать/критиковать иль предлагать, вариаций немало: string.trim(str) -- обрезка строки (line) string.trim_l(str) -- обрезка строки слева (left) string.trim_r(str) -- обрезка строки справа (right) string.trim_w(str) -- обрезка строки по первому слову (word) ... Изменено 10 Июня 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-706298
Callisto 2 Опубликовано 22 Июня 2012 Поделиться Опубликовано 22 Июня 2012 Доброго времени суток. Возник новый вопрос. Возможно ли, время, представленное в секундах (как пример os.time), преобразовать в формат: год, месяц, день, час, минута. Собственно сама задача, из реестра получаю дату установки ОС в секундах и надо привести к человеческой форме восприятия. Есть ли какой-нибудь штатный способ перевода или придется реализовывать с помощью более сложного кода? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-708692
Кактус_523 1 Опубликовано 22 Июня 2012 Поделиться Опубликовано 22 Июня 2012 Задать шаблон. os.date("%Y.%m.%d") К примеру опять же. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-708693
Callisto 2 Опубликовано 22 Июня 2012 Поделиться Опубликовано 22 Июня 2012 Кактус_523, А причем тут os.date? У меня есть число и его необходимо преобразовать в дату. Или может я чего не понимаю? Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-708694
Кактус_523 1 Опубликовано 22 Июня 2012 Поделиться Опубликовано 22 Июня 2012 (изменено) Тогда я непонял вопроса. Смысл только сейчас дошел. Насколько я помню штатного метода нет. А самопальный будет не такой уж сложный, сколько мозговыносящий. Найти количество дней, минут, секунд и уже это переводить в года и месяцы.... На википедии кажется была статейка. Изменено 22 Июня 2012 пользователем Кактус_523 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-708700
Nazgool 250 Опубликовано 24 Июня 2012 Поделиться Опубликовано 24 Июня 2012 Callisto os.date и есть штатный метод lua. Так что Кактус_523 сказал верно. Вызывай os.date(формат, число секунд) "число секунд" и есть то число, которое преобразовывается в дату. Также ты можешь получить таблицу со всеми данными времени. Напр. t = (os.date("*t", 1500000000)) for k,v in pairs(t) do print(k,v) end Выйдет таблица вида : hour 5 min 40 wday 6 day 14 month 7 year 2017 sec 0 yday 195 isdst true Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-709106
Кактус_523 1 Опубликовано 11 Июля 2012 Поделиться Опубликовано 11 Июля 2012 Здравствуйте, товарищи! У меня вопрос в тему. Есть дата в текстовом формате. Есть ли стандартные функции для перевода в секунды c 1970 года? Уж очень не хочется считать високосные года... Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-713299
Malandrinus 615 Опубликовано 11 Июля 2012 Автор Поделиться Опубликовано 11 Июля 2012 Кактус_523, os.difftime (в мануале слабо было поискать? У меня заняло меньше, чем сюда отвечал :ny_angry: ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-713308
Кактус_523 1 Опубликовано 11 Июля 2012 Поделиться Опубликовано 11 Июля 2012 (изменено) Вот незадача. Для os.difftime требуется количество секунд. А у меня всего лишь текст. Наверное ты не так понял слово текст. Вот "07-04-12_16-12-17". Парсить и считать лень. Вот и спросил. Может в стандарте есть чего... Изменено 11 Июля 2012 пользователем Кактус_523 Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-713312
Malandrinus 615 Опубликовано 11 Июля 2012 Автор Поделиться Опубликовано 11 Июля 2012 Кактус_523, а, так ты хочешь, чтобы тебе одному известно как заданную строку за тебя кто-то автоматом распарсил? =) Нет, парсить таки придётся. А дальше, чтобы получить нужное время, используй os.time, которая выдаёт не "количество секунд", как ты выше заявил, а "число, смысл которого зависит от платформы". Если это винда, то это и в самом деле количество секунд с какого-то там года, возможно уже прямо то число, которое тебе надо. Однако в общем случае для вычисления числа секунд с нужного момента надо использовать os.difftime(t2, t1). Где t1,t2 - это времена, которые можно собрать из компонент (год, месяц и т.д.) функцией os.time. Ещё раз, аргументы difftime - это число во внутреннем формате Lua, а результат - строго секунды. Может в стандарте есть чего... Откуда такие сомнения? Одна страница текста всего. Справочное руководство по языку Lua - Функции операционной системы P.S.: Кстати, проверил, что именно выдаёт os.time() (т.е. текущее время без аргументов). В самом деле у меня (под виндой) выдаёт время в секундах от момента начала 1970 г. - 5 часов, что очевидно соответствует моему часовому поясу. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-713355
Кактус_523 1 Опубликовано 12 Июля 2012 Поделиться Опубликовано 12 Июля 2012 Хм. os.time() заработала. В предыдущий раз выдавала nil. Скорей всего я ей или строки передавал, или еще какая мистика происходила. Ссылка на комментарий https://www.amk-team.ru/forum/topic/11584-yazyk-lua-obschie-voprosy-programmirovaniya/page/33/#findComment-713407
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти