Anonymous
А вызывать как с передачей strs аргументом?
mva
mva
вот только эт
mva
по хорошему, в объявлении функии, и внутри неё, лучше использовать другое имя
mva
ну, на всякий случай
Anonymous
Короче я все что можно перепробовал. Нифига,сдаюсь... можно пример?
Artem
всем привет, подскажите чем лучше сделать
из такого:
"Шахзада"
в такое:
"\u0428\u0430\u0445\u0437\u0430\u0434\u0430"
Artem
а из готовых модулей, типа utf8.escape?
Александр
Kirill
Приветствую, как в случае отсутствия модулей подгружать их по мере необходимости? есть тысяча модулей с именами M0, M1 ... M99 внутри которых обязательно определена соответствующая одноимённая глобальная функция. эти модули могут быть использованы из других скриптов, как обойтись без require?
Kirill
подгружать все 1000 перед исполнением не вариант
Александр
Kirill
-- контроль плоскости Z вдоль Y
require'M622'
M622('Y30Z10')
Snusmumriken
Kirill
Благодарю
Snusmumriken
Snusmumriken
Прост в твоём случае проще так:
local lib = setmetatable({}, {__index = function(self, k) require(k); self[k] = _G[k]; return self[k] end})
lib.M622("Y30Z10")
Но это всё равно не очень хорошо имхо.
Kirill
кроме функций ещё могут быть префиксные действия, несовместимые между модулями
Kirill
нужно грузить только нужные, иногда важен порядок, тогда точно require
Snusmumriken
Ужс какой. У тебя есть доступ к файлам-скриптам? Ты можешь их изменять?
Snusmumriken
В крайнем случае, оно манки-патчится.
Snusmumriken
Типа:
function loadmodule(name)
1. Ищем файл со скриптом по package.path
2. Ищем префиксные штуки
3. Добавляем в начало текста скрипта локальную табличку, сгружаем в неё префиксные штуки
4. Заменяем имена префиксных штук в функции модуля на табличные, чтобы не пересекалась с другими
5. Саму функцию тоже пихаем в табличку
6. Ретурним из модуля табличку и кешируем где-нибудь
end
Скрипты — это текст, и с ними можно работать как с текстом, даже на лету. И будет совершенно пофигу на порядок, нормальные, изолированные друг от друга модули, не какающие в глобальное пространство.
А если можно менять сами файлы — эти же операции можно проделать над каждым скриптом, теми же луями, заменив старую, глобально-какающую версию скрипта на новую, изолированную, нормальную.
Kirill
менять могу, и планирую. сейчас собираю варианты.
Kirill
когда я пытаюсь вызвать неопределённую функцию происходит поиск в глобальной таблице?
Snusmumriken
Есть таблица _G. Всё что объявлено без local (т.е. глобальное) — направляется туда.
Когда ты пытаешься вызывать неопределённую функцию (или просто неопределённую переменную), луа сначала лезет на разные уровни видимости "выше текущего", а потом — да, в глобальную таблицу _G, в которой хранится всё глобальное.
Snusmumriken
Snusmumriken
Я даже скрипт накатал по переделке твоих скриптов (если оно там в подобном формате) в правильные:
local currentstate = "const"
local funcname = ""
local pattern = "[a-zA-Z0-9_]+"
for line in io.lines(arg[1]) do
if currentstate == "const" then
if line:find(pattern .. "%s+=") then
io.write("local " .. line .. "\n")
end
end
if currentstate == "func" then
io.write(line .. "\n")
end
if line:find("^function") then
currentstate = "func"
funcname = line:match("function (" .. pattern .. ")")
io.write("local " .. line .. "\n")
end
end
io.write("return " .. funcname)
Snusmumriken
Берёшь батник с подобным содержимым:
lua %~dp0/fixer.lua %1 > %1.fixed 2>&1
Пихаешь его в ту же папку что и скрипт (обзови скрипт fixer.lua):
И правишь имя своего луёвого интерпретатора.
После чего, перемещаешь на него файлы скриптов мышкой.
Kirill
Ок, попробую
Snusmumriken
Но бекап на всякий случай всё равно сделай ))
Anonymous
Anonymous
Подскажите пожалуйста... стал на этом моменте
Snusmumriken
local env = setmetatable({}, {__index = _G})
Anonymous
Это в подгружаемом файле?
Anatoliy
Всем привет, ребята подскажите кто нибудь имел дело с передачей каких нибудь значений из скрипта Луа в Эксель по технологии DDE (или по какой нибудь другой более современной - COM или OLE) В частности хочу вот что - в риалтайме из скрипта луа передавать новые значения в Эксель где они будут выстраиваться в два столбика - время/переданное значение
Lucky
Anatoliy
usernameak
эксель можно скриптовать???
Lucky
Leon174
Пригодится или нет?
https://github.com/jmcnamara/xlsxwriter.lua
Lucky
http://my-excel.ru/voprosy/kak-txt-fajl-perevesti-v-excel.html
Anatoliy
http://my-excel.ru/voprosy/kak-txt-fajl-perevesti-v-excel.html
В приницпе да, писать из луа в CSV - самый простой вариант, даже преобразовывать ничего ненадо, но тогда придется этот CSV переоткрывать заново каждый раз после обновления, так что буду ковырять luacom - таким образом можно из луа в в открытый эксель сразу в рилтайме нове даные передавать
Snusmumriken
Snusmumriken
Snusmumriken
Читай не то, что человек пишет формально, а то, что именно он имеет ввиду.
usernameak
на винде нельзя писать в файл, если он открыт уже кем-то
mva
можно
usernameak
разве?
usernameak
она же ставит exclusive lock на запись при открытии
mva
если первооткрыватель явно открыл в не-эксклюзивном режиме
usernameak
а, то есть это только на удаление-переименование влияет?
Snusmumriken
В коде скрипта может быть функция записи типа такой:
local function appendfile(text, file)
local f = io.open(file, "ab+")
f:write(text)
f:close()
end
В таком случае, абсолютно пофигу на блокировки. Хоть и процесс записи незначительно замедляется.
Snusmumriken
Да, если у тебя есть utf8 в csv, чтобы excel потом нормально прочитал файл, допиши в начало \239\187\191.
Alexandr
Привет всем! Как можно высчитать дни между двумя датами. Типа
"Вы зарегистрированы : "..(текущее время(os.date()) - 25.12.2020(дата регистрации)).." дней"
Snusmumriken
Snusmumriken
Для этого обычно пишут довольно крупные библиотеки, например
https://github.com/Tieske/date
Snusmumriken
И то, оно не учитывает всякие добавочные секунды и часовые пояса.
Snusmumriken
Но в самом тупом варианте, прокатит и:
local daysbetween = math.floor((current_time - saved_time) / (24*60*60)),
где current_time и saved_time это результат os.time(), т.е. unix timestamp.
Snusmumriken
Для преобразования дат в таймстампы и обратно — используй os.date и os.time.
Alexandr
Snusmumriken
Имхо нагромождение. Ещё один формат. Примерно как "преобразуем таблицы в json в yaml чтобы преобразовать в json"
Snusmumriken
Ты это говоришь, но у меня есть подозрение что ты говоришь это без осознания всей беспросветности.
Anatoliy
Snusmumriken
Ты кажется меня немного не понял. Ладно.
Anatoliy
Alexandr
Вот скачал модуль date с https://github.com/Tieske/date ... Но так и не понял как им пользоваться. Куда запихивать его?
Alexandr
Поисковики ответов не дают.
mva
я могу сказать почему никто не отвечает :)
mva
потому что текст и суть вопроса показывают практически нулевой уровень знаний в обсуждаемом предмете (программирование на Lua)
mva
и люди оценивают склько времени понадобится на то, чтобы объяснить и приходят к выводу что у них столько нету
mva
=======
mva
а отвечая по теме - запихивать туда, откуда интерпретатр потом сможет его загрузить
mva
см package.path/package.cpath