Pergunta

Eu preciso de arquivos de carga para variáveis ??de Lua.

Digamos que eu tenho

name address email

Não há espaço entre cada. Eu preciso do arquivo de texto que tem x-muitas dessas linhas em que ele seja carregado em algum tipo de objeto - ou pelo menos a uma linha deve ser cortado em matriz de strings divididos por espaços

.

É este tipo de trabalho possível na Lua e como devo fazer isso? Eu sou muito novo para Lua, mas eu não consegui encontrar nada relevante sobre Internet.

Foi útil?

Solução

Para expandir a resposta de 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

Este, porém, não vai cobrir o caso de que seus nomes têm espaços.

Outras dicas

Você quer ler sobre Lua padrões , que fazem parte do corda biblioteca . Aqui está um exemplo de função (não testado):

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

Esta função apenas agarra três substrings composta de não-espaço (%S) caracteres. A função real teria algum erro verificando se o padrão de fato corresponde.

Se você tem controle sobre o formato do arquivo de entrada, você será melhor armazenar os dados em formato de Lua como descrito aqui .

Se não, use o io biblioteca para abrir o arquivo e, em seguida, usar o biblioteca corda como:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top