B
да
B
когда читаем файл а потом закрываем его без записи куда либо что со считаной информацией происходит?
Saphire
Если он их при чтении никуда не сохранил - нигде
B
у меня просто что так что так пустота
B
function folderInfo() local inf = [[info : ]] local PATH = [[PATH]] local folder = io.popen([[dir ]] .. PATH) if folder then local file = io.open(PATH .. [[info.txt]], 'w') file:write( tostring(folder:read('*all')) ) file:close() inf = inf .. tostring( folder:read('*all') ) folder:close() else print('folder not folder') end print(inf) end
Snusmumriken
Когда функция закончилась, все локальные переменные стираются.
B
так он перед концом на принте ничего не дает
Snusmumriken
Вооще ничего или только info : ?
B
вот в файл из файла нормально а так, не особо
Snusmumriken
Ну значит folder:read возвращает пустую строку, принтни её отдельно в символах-маркерах типа data = folder:read'*all' print('['..data..']')
Snusmumriken
А, кстати нет.
Snusmumriken
folder:read('*all') - эта фигня считывает содержимое от текущей позиции до конца файла, и перематывает курсор в конец. Поэтому или один раз читай folder:read('*all'), или отматывай назад: data = folder:read('*all') folder:seek('cur', -#data)--отматываем курсор назад
Snusmumriken
Да, файлы имеют курсор.
Snusmumriken
Именно из-за курсора, эта функция каждый раз считывает новый чанк. src:read(n) - считать с текущей позиции (0, при открытии файла) n байт, переместить курсор на n.
Snusmumriken
function copyFile(src, dst, csize) src = assert(io.open(src, 'rb')) dst = assert(io.open(dst, 'wb')) csize = csize or 1024 local chunk = src:read(csize) while chunk do dst:write(chunk) chunk = src:read(csize) end src:close() dst:close() end
Snusmumriken
Карочи, file = io.open('file.txt', 'rb') part1 = file:read(10) -- считать с 0 по 9 байты файла part2 = file:read(15) -- считать с 10 по 24 байты part3 = file:read'*all' -- считать с 25 до конца файла. file:seek('cur', -10) -- переместить курсор с конца файла (потому что мы на нём находимся в данный момент) на десять байт назад part4 = file:read'*all' -- считать последние 10 байт Да, этот интерфейс - прямая калька с сишной io-системы, сишка работает точно так же. Референс: http://lua-users.org/wiki/IoLibraryTutorial
B
ясноПонятно, толковоДоходчиво ща все переделаем
Alexey
почему *all а не просто *a ?
Alexey
Ну ни с 5,2 просто a
Snusmumriken
Собсно, по этому же принципу можно управляться с гигантскими файлами, гулять по их содержимому, даже перезаписывать куски (write когда курсор не в конце - перезаписывает текущий кусок) и т.п. > почему *all а не просто *a ? Потому что почему бы и нет. Помнится, с поздних версий оно реагирует просто на наличие буквы "a", но лучше - совместимость с любой. Половина тут сидящих сидят на 5.1.
Alexey
https://www.lua.org/manual/5.0/manual.html#5.6 https://www.lua.org/manual/5.1/manual.html#pdf-file:read https://www.lua.org/manual/5.2/manual.html#pdf-file:read https://www.lua.org/manual/5.3/manual.html#pdf-file:read
Alexey
ну как бы документация не определяет *all
Snusmumriken
Ничо страшного, и так работает, и доходчивее понятно что именно мы делаем ))
Alexey
Ну и я тоже 5,1 использую :)
Snusmumriken
Карочи, не заморачивайся.
Snusmumriken
Хм, интересно, покатит ли file:read'*absolutly all file content' Ща проверю ))
Snusmumriken
Да, катит )))))
Snusmumriken
О, кстати, посоны, го хвастаться последними достижениями!
Snusmumriken
Я почти только что купил жвачу juicy fruit, и в ней оказалась переводная татушка! Ща пойду в душ чтобы перевести на чистую тушку, дольше не смоется. Достижение!
B
черт его дпже знает чем хвастаться
Snusmumriken
Во, ещё я пишу lua-steam на с++, но этим я уже всем уши прожужжал.
Кто-нибудь использует компилятор Haxe (Lua в качестве целевой платформы)?
Если да, то зачем. :)
B
не знаю, я вон хочу дописать свои вила по работе с love проектами до более менее внятного состояния
Да, кстати, есть extern для love2d: https://github.com/redchew/hx-love2d
Snusmumriken
Ну, помнится lua-версия haxe не особо оптимизирована (объекты натурально клонируются из класса, без использования метаметода __index), плюс писать откровенно больше кода чем в lua. Ну, лично у меня загон на "жизнь слишком коротка чтобы писать много буков".
B
ничерта с этими патернами не пойму
B
есть возможность искать в строках что то без указания конкретного слова? у меня есть расширение файла, можно со строки вычленить название файла? что то типа такого думал local pattern = "%s%a.racshirenie" но оно понятно дело далеко шлет
B
или только брать всю строку, искать соответствие по расширению, потом еще раз идти но ища пробелы а потом складывать собсна 2и2 прикидывая местоположение ближайшего к совпадению по формату пробела и оттуда считать и вычленять уже целый кусок?
B
а что дадут () и что значит *-
B
что то такое вроде работает local pattern = "%s%a+%.racshirenie"
B
а там уже как то обдать до точки найти ее, и до нее обрезать просто
B
оно все вроде не сложное просто разобрать все нужно, ну и не запутаться в процессе
Snusmumriken
Не благодари. str = 'c:/temp/folder/file.lua.exe' disk = str:match'%w:/' -- 'c:/' diskletter = str:match'(%w):' -- 'c' folderpath = str:match'.*/' -- 'c:/temp/folder/' parentfoldername = str:match'.*/(.*)/' -- 'folder' filefullname = str:match'.*/(.*)' -- 'file.lua.exe' filename = str:match'.*/(.-)%.' -- 'file' fileext = str:match'.*/.-%.(.*)' -- 'lua.exe' filelastext = str:match'.*/.*%.(.*)' -- 'exe' Домашнее задание: разобрать что тут происходит.
B
это легко сказать
B
ага из происходящего я пока понял что скобкамы мы выделяем те вещи что нас конкретно интересуют, что мы получим вне зависимости от шаблона тобишь сразу ясно что скобками тогда злоупотреблять не стоит
B
я щас просто баловался с позициями когда стока большая и совпадений много вроде работает и выводит все результаты
Snusmumriken
это легко сказать
Ну, я сейчас довольно легко написал, проверив на кошках одну из регулярок, ибо был в ней не очень уверен : ) Как придрочишься - легко будешь составлять подобную лабуду.
B
с match нельзя с позиционированием играть как я понял, для множества совпадений он не особо годен? и типа такие вещи для избавления от пробелов это сильно зашквар ? : local serchPattern = "%s(%w*%.zip)" local ins = string.sub( infoFolder, string.find( infoFolder, serchPattern, position) ) ins = ins:match(serchPattern)
B
как не заплутать в каше? малевать себе карту на бумажке что куда как?
Сделать из неё торт со слоями. Как вариант.
Anonymous
Надо думать как шаблон. filename by vasya.mp3 Первая часть - название, любые символы. Да, даже точка Вторая часть - расширение 1) (%w+)%.(.+) - три части. Имя, точка, расширение. Имя может состоять только из %w прописных букв и цифр. Пробел пролетает. Но зато %w+ значит забираем сколько можем до точки %. и всё расширение после точки .+ 2) ([%w%s]+)%.(.+) now with space. 3) (.+)%.(.+) а зачем мы вообще фильтруем имя? Гуляй Борисовка! Всё что найдешь. 4) Правильно, что теперь с .bash делать? А имени может и не быть, значит вместо Плюса (1 и более символов) ставим * (0 и более символов): (.*)%.(.+) Мда, только теперь .bash - это расширение. Как-то не правильно. Выпивать, так выпивать: 5) print(string.match(".bash", "%.?(.+)%.?(.*)")) - Вроде бы bash выделился, но теперь у всех других файлов сломается. Предел Lua'шных паттернов - это Необязательный ? оператор в связке с другими. В этом случае .+ после себя ничего не оставит - жадина, а .- ничего не возьмет - добрый слишком. Да и ещё, если не заметил, то точка пропала :) Поэтому самым оптимальным решением будет 4. с if-ом на имя+расширение. Это ещё не говоря о множественных расширениях файла (download.zip.part)
Alexey
.bash - это рсширение или имя? :)
Anonymous
От паттерна зависит :D, вообще дописать хотел
Anonymous
Я случайно на компе сразу сообщение отправил. дописал стену почёта :P
Alexey
Есть еще test.db.bak lua5.1.exe
B
Я тут что б в заблуждение не вводить, спрашивал как ориентироваться в проекте в целом
Nick
подскажите, чем лучше всего валидировать JSON Schema? В гугле набрал «JSON Schema lua», вижу несколько вариантов
Snusmumriken
Ну выбери какой-нибудь : )
Alxius
возможно ли Использование в LUA использование имени переменной из таблицы в пхп это было так $$table[id1] => $$name
Alxius
т.е. в таблице хранится значение "menu_startgame" и в итоге получается например $menu_startgame , знак $ ставлю для удобства понимания, в Луа его нет разумеется. В инете читал какие попало форумы на эту тему по запросу но ничего понятного не нашёл.
Snusmumriken
t = {['menu_startgame'] = {values = {...}, items = {...}}} v = t['menu_startgame'] v = t.menu_startgame
Snusmumriken
Что ты хочешь на выходе получить?
Alxius
просто вывод переменной (она содержит картинку) на экран. но чтобы эта переменная контролировалась извне программы таблицей, таблица уже сделана.
Snusmumriken
Ммм. t = {...} -- заполняется снаружи function love.draw() -- допустим, у нас love2d for i, v in ipairs(t) do if v.image then love.graphics.draw(v.image) end end Это?
Snusmumriken
Меняем картинки в таблице - меняется вывод.
Alxius
ну примерно так. правда я зачем то уже это предварительно сделал в программе. menuicon = love.graphics.newImage("Textures/10-menu.png"); (иначе же прелоад картинок наерное работать не будет)
Alxius
попробую посмотрю то выйдет. спасибо111
Alxius
не знаю фигня какая то получается. вроде всё верно . и точку пробовал ставить и [' '] вместо точки не помогает — count (pages) w LUA piszetsia tak #pages for i=1, #pages,1 do if (selectedoptionmenu==i) then green () else white () end; if (pages[i+1][1]) then if (pages[i+1][6]~="x") then love.graphics.draw(pages.[i+1][2], 90,h+wysotamenu*menu_printed); love.graphics.print(pages[i+1][3], 190, h+wysotamenu*menu_printed); menu_printed=menu_printed+1; end end end Drawable expected , got string
Alxius
даже так не работает love.graphics.draw([pages.[i+1][2]], 90,h+wysotamenu*menu_printed); и так тоже love.graphics.draw(['pages.[i+1][2]'], 90,h+wysotamenu*menu_printed); Tablica wygladit tak: 1!menu_startgame!Continue!Продолжить!!!Continue!Продолжить!!! 2!menu_loadgame!Load Game!Загрузка!!!!!!! 3!menu_savegame!Save Game!Сохранение!!x!!!!!
Snusmumriken
Структуру таблицы напиши.
Alxius
0!ПОЛЕ[1] ID обьекта![2]опция меню для перехода[3] имя eng[4] имя рус [5]png [6] menuoption (disable) 1!menu_startgame!Continue!Продолжить!!!Continue!Продолжить!!! 2!menu_loadgame!Load Game!Загрузка!!!!!!! 3!menu_savegame!Save Game!Сохранение!!x!!!!! 4!menu_authors!Authors!Автор!!!!!!! 5!menu_restart!Start new game!Новая игра!!x!!!! 6!menu_settings!Settings!Настройки!!!!!! 7!menu_editor!Editor!Редактор!!x!!!!!! 8!menu_exit!Exit!Выход!!!!!!!
Alxius
поле №2 является и опцией для перехода (строкой) и одновременно именем нужной переменной в которой хранится нужная картинка
Alxius
в другом месте об это же споткнулся. if ($$pages2[i+1][2]==1) then
Snusmumriken
Ммм. Карочи, возьми serpent(https://github.com/pkulchenko/serpent) или json, и напечатай содержимое таблицы. P.S. Очень сишно. Нет, не то чтобы плохо, но ты как будто пишешь на плохом си.
Snusmumriken
А то ты сам что-то сделал, не знаешь что.
Snusmumriken
Хотя если бы ты чуть-чуть вкурил в луа-таблицы и ссылки, мог бы легко сделать что-то читаемое и расширяемое. Могу дать пример, но если ты не вкурил - ты его поймёшь.
Alxius
не не можно без доп библиотек это сделать . это ПХП стиль обращения к ячейкам таблицы разве нет?
Alxius
зачем мне печатать таблицу если и так я помню её наизусть и даже написал выше. ! - это разделитель колонок