Wie Textdatei in einer Art tabellenartige Variable in Lua laden?
Frage
Ich brauche Datei zu Lua Variablen zu laden.
Nehmen wir an, ich habe
name address email
Es gibt Raum zwischen den einzelnen. Ich brauche die Textdatei, die x-viele solcher Linien hat darin in eine Art von Objekt geladen werden - oder zumindest die eine Zeile werden durch Leerzeichen getrennt, um Array von Strings geschnitten werden
.Ist diese Art von Arbeit möglich in Lua und wie soll ich das tun? Ich bin ziemlich neu in Lua, aber ich kann nichts relevant im Internet finden.
Lösung
Um auf uroc Antwort erweitern:
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
Dies wird jedoch nicht für den Fall, dass Ihre Namen Leerstellen enthalten.
Andere Tipps
Sie wollen über Lua Muster , das Teil lesen sind der String-Bibliothek . Hier ist ein Beispiel-Funktion (nicht getestet):
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
Diese Funktion greift nur drei Teil bestehend aus nach Leerzeichen (%S
) Zeichen. Eine echte Funktion würde einige Fehler haben die Überprüfung der Muster, um sicherzustellen, tatsächlich entspricht.
Wenn Sie die Kontrolle über das Format der Eingabedatei haben, werden Sie die Daten in Lua-Format besser als beschriebene Speicherung hier .
Wenn nicht, verwenden Sie die io Bibliothek die Datei zu öffnen und dann die Verwendung String-Bibliothek mögen:
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