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

StackOverflow https://stackoverflow.com/questions/1891473

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Допустим, у меня есть

name address email

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

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

Это было полезно?

Решение

Чтобы подробнее остановиться на ответе урока:

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

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

Другие советы

Вы хотите прочитать о 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) персонажи.Реальная функция будет иметь некоторую проверку на ошибки, чтобы убедиться, что шаблон действительно совпадает.

Если у вас есть контроль над форматом входного файла, вам будет лучше хранить данные в формате Lua, как описано здесь.

Если нет, используйте библиотека ввода - вывода чтобы открыть файл, а затем использовать библиотека строк Нравится:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top