Как загрузить текстовый файл в вид подобной таблице переменной в Lua?

Я должен загрузить файл в переменные Lua.

Скажем, я добрался

name address email

Существует пространство между каждым. Мне нужен текстовый файл, который имеет x-many таких строк в нем, чтобы быть загруженным в некоторый объект - или по крайней мере одна строка должна быть сокращена к массиву строк, разделенному на пробелы.

Действительно ли это - вид задания, возможного в Lua и как я должен сделать это? Я довольно плохо знаком с Lua, но я ничто не мог найти релевантным в Интернете.

6
задан Brian Tompsett - 汤莱恩 15 October 2016 в 20:28
поделиться

3 ответа

Чтобы расширить ответ uroc:

local file = io.open("filename.txt")
if file then
    for line in file:lines() do
        local name, address, email = unpack(line:split(" ")) --unpack turns a table like the one given (if you use the recommended version) into a bunch of separate variables
        --do something with that data
    end
else
end
--you'll need a split method, i recommend the python-like version at http://lua-users.org/wiki/SplitJoin
--not providing here because of possible license issues

Это, однако, не касается случая, когда в ваших именах есть пробелы.

9
ответ дан 8 December 2019 в 05:21
поделиться

If you have control over the format of the input file, you will be better off storing the data in Lua format as described here.

If not, use the io library to open the file and then use the string library like:

local f = io.open("foo.txt")
while 1 do
    local l = f:read()
    if not l then break end
    print(l) -- use the string library to split the string
end
3
ответ дан 8 December 2019 в 05:21
поделиться

Вы хотите прочитать о шаблонах Lua , которые являются частью строковой библиотеки . Вот пример функции (не тестировался):

function read_addresses(filename)
  local database = { }
  for l in io.lines(filename) do
    local n, a, e = l:match '(%S+)%s+(%S+)%s+(%S+)'
    table.insert(database, { name = n, address = a, email = e })
  end
  return database
end

Эта функция просто захватывает три подстроки, состоящие из непробельных (% S ) символов. Реальная функция будет иметь некоторую проверку ошибок, чтобы убедиться, что шаблон действительно совпадает.

11
ответ дан 8 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: