stripwire 0 Опубликовано: 17 августа, 2017 (изменено) могу ли я сделать так? t = {} t = io.read(имя файла) если нет, то как можно присвоить таблице значения из файла? p.s. только учу lua, практики 0 ._. и как можно поменять ник? а то при регистрации буквы чуть перепутал[ Изменено 17 августа, 2017 пользователем striwpire Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 22 августа, 2017 (изменено) то есть str_data менять не надо, а путь при сохранении/загрузке он сам находит? [...] так? [прост странно, что путь не надо писать ._., и куда тогда он будет сейвить?] Перечитайте пост Алекса, в конце концов. Там же чёрным по белому написано, что выхлоп serialization.serialize нужно потом сохранить в файл. Писатель local srl = require("serialization") local tbl = { test = 5, hey = { [5] = 42, ["hello, world"] = "goodbye" } } local serialized = srl.serialize(tbl) local path = "/tmp/test" local file = io.open(path, "w") file:write(serialized) file:close() Читатель local srl = require("serialization") local path = "/tmp/test" local file = io.open(path, "r") local serialized = file:read("*a") file:close() local tbl = srl.unserialize(serialized) print(tbl.test, tbl.hey[5], tbl.hey["hello, world"], srl.serialize(tbl)) P. S. Над полем текста, оказывается, есть кнопочки форматирования. Зачем кидать сырой код, когда есть кнопка для кода: ? Изменено 22 августа, 2017 пользователем Fingercomp 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 17 августа, 2017 local tab = {} tab = loadfile(имя файла)() В файле return {...} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 17 августа, 2017 спс а если таблицу буду сохранять вот так: io.open(addres,'w') io.write(tbl) io.close() потом она нормально загрузится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 17 августа, 2017 потом она нормально загрузится? нет. можно попробовать данные сериализовать serialization = require('serialization') str_data = serialization.serialize(table) -- строка записать их в виде стринга в файл, а потом при необходимости считать и десериализовать table = serialization.unserialize (str_data) -- таблица по идее должно работать. А лучше, наверно, использовать библиотеку json Также поищи на форуме в библиотеках и программах что-то про "запись данных и конфигурационных параметров в файл". Там хорошие были библиотечки для хранения массивов данных в файлах и их извлечения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 19 августа, 2017 local filesystem = require("filesystem") --------------------------------------------------------------------- function table.unserialize(serializedString) checkArg(1, serializedString, "string") local success, result = pcall(load("return " .. serializedString)) if success then return result else return nil, result end end function table.fromFile(path) checkArg(1, path, "string") if filesystem.exists(path) then if filesystem.isDirectory(path) then error("\"" .. path .. "\" is a directory") else local file = io.open(path, "r") local data = table.unserialize(file:read("*a")) file:close() return data end else error("\"" .. path .. "\" doesn't exists") end end --------------------------------------------------------------------- local myTable = table.fromFile("/myFileWithTable.lua") Десериализация таблицы на чистом луа без лишних библиотек Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 20 августа, 2017 local tab = {} tab = loadfile(имя файла)() В файле return {...} такое сохранение для дальнейшего чтения прокатит? function save(tab,name) io.open(name[w+]) file:write('return{'tab'}') io.close() end поправьте что не так [пока не понял как пользоваться способами сохранения написанными выше, поэтому попробовал написать своё] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 20 августа, 2017 такое сохранение для дальнейшего чтения прокатит? function save(tab,name) io.open(name[w+]) file:write('return{'tab'}') io.close() end поправьте что не так [пока не понял как пользоваться способами сохранения написанными выше, поэтому попробовал написать своё] Что значит w+? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 20 августа, 2017 (изменено) Что значит w+? вроде как полная перезапись файла http://antirek.github.io/luabook/standardLibraries.htm Изменено 21 августа, 2017 пользователем stripwire Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 21 августа, 2017 ну тк? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 21 августа, 2017 io.open(name[w+]) надо бы так: io.open(name,"w") file:write('return{'tab'}') тут надо преобразовывать таблицу в строку. Как это сделать, писали выше. У тебя же непонятно что. io.close() наверное file:close() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 21 августа, 2017 (изменено) function table.fromFile(path)checkArg(1, path, "string") if filesystem.exists(path) then if filesystem.isDirectory(path) then error("\"" .. path .. "\" is a directory") else local file = io.open(path, "r") local data = table.unserialize(file:read("*a")) file:close() return data end else error("\"" .. path .. "\" doesn't exists") end end просто только учусь делать проги для opencomp, и хочется разобраться что и для чего в коде, а не просто пользоваться готовым кодом. вот например, что не понимаю: 1. куда писать имя таблицы, которую сохраняем? 2. checkArg(1, path, "string") if filesystem.exists(path) then if filesystem.isDirectory(path) then error("\"" .. path .. "\" is a directory") что делает каждая из этих строк? 3. local data = table.unserialize(file:read("*a")) что это и зачем вызывать функцию загрузки? кароче, почти ничего из того кода не понял[ Изменено 21 августа, 2017 пользователем stripwire Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TC1061 14 Опубликовано: 22 августа, 2017 просто только учусь делать проги для opencomp, и хочется разобраться что и для чего в коде, а не просто пользоваться готовым кодом. вот например, что не понимаю: 1. куда писать имя таблицы, которую сохраняем? 2. что делает каждая из этих строк? 3. что это и зачем вызывать функцию загрузки? кароче, почти ничего из того кода не понял[ 1. Имя таблицы надо писать в функцию serialization.serialize(). Но в начале программы надо поставить serialization=require("serialization") 2. Первая строка проверяет, является ли первый аргумент функции table.fromPath строкой. Вторая проверяет, есть ли файл. Дальше идет проверка, является ли файл папкой. Если да, выводит ошибку. 3. Это чтение данных из файла и передача его в функцию десериализации (превращение строковых данных в таблицу). file - это хендлер файла, а :read - это читальщик файла - он читает данные из файла и возращает их. Можно дать ему числовой аргумент - и он прочитает столько, сколько указано прочитать. Если дать ему math.huge или "*a", он прочитает весь файл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 22 августа, 2017 table = serialization.unserialize (str_data) тут я так понимаю на table имя таблицы в которую грузить значения, а на str_data путь к файлу с сохранённой таблицей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 22 августа, 2017 тут я так понимаю на table имя таблицы в которую грузить значения, а на str_data путь к файлу с сохранённой таблицей? str_data это строка, считанная из файла и содержащая таблицу в строковом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 22 августа, 2017 (изменено) str_data это строка, считанная из файла и содержащая таблицу в строковом виде. то есть str_data менять не надо, а путь при сохранении/загрузке он сам находит? serialization = require('serialization') tbl = {} str_data = serialization.serialize(tbl) -- сохранение tbl = serialization.unserialize (str_data) -- загрузка так? [прост странно, что путь не надо писать ._., и куда тогда он будет сейвить?] Изменено 22 августа, 2017 пользователем stripwire Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
stripwire Автор вопроса 0 Опубликовано: 22 августа, 2017 Огромное спасибо за подробное объяснение. Теперь даже больше понял, чем просто как сохранять и загружать таблицы]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
могу ли я сделать так?
t = {}
t = io.read(имя файла)
если нет, то как можно присвоить таблице значения из файла?
p.s. только учу lua, практики 0 ._.
и как можно поменять ник? а то при регистрации буквы чуть перепутал[
Изменено пользователем striwpireПоделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах