Cómo cargar el archivo de texto en tipo de variable de tabla-como en Lua?
Pregunta
Es necesario cargar el archivo a variables de Lua.
Digamos que tengo
name address email
Hay un espacio entre cada uno. Necesito el archivo de texto que tiene x-muchas de estas líneas en que se va a cargar en una especie de objeto - o al menos la de una línea será cortada a matriz de cadenas divididas por espacios
.Es este tipo de trabajo posible en Lua y cómo debería hacerlo? Soy bastante nuevo en Lua, pero no pude encontrar nada relevante en Internet.
Solución
Para ampliar la respuesta 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
Sin embargo, esto no cubre el caso de que sus nombres no tienen espacios en ellos.
Otros consejos
Cuando se desea leer sobre Lua patrones , que son parte de la cadena biblioteca . Aquí está una función de ejemplo (no probado):
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 función simplemente agarra tres subseries compuestos de caracteres no-espacio (%S
). Una función real tendría que comprobar algún error para asegurarse de que el patrón coincide realidad.
Si usted tiene control sobre el formato del archivo de entrada, que será mejor de almacenar los datos en formato de Lua como se describe aquí .
Si no es así, utilice el io biblioteca para abrir el archivo y luego usar el biblioteca de cadenas 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