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
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
зачем мне печатать таблицу если и так я помню её наизусть и даже написал выше. ! - это разделитель колонок