String zerlegen in Lua

Gast #3962289
Lesenswert?

Wie angekündigt, hier die erste Frage zu Lua ;)
Ich möchte den Inhalt eines LogFiles in einem Table speichern um es dann 
weiter zu verarbeiten.
Also Datei öffnen und zeilenweise lesen ist kein Ding. Nur wie bekomm 
ich die Daten jetzt ins Table?
Meine erste Idee wäre, mit match die Position der Tabs je Zeile zu 
bestimmen und mit (g)sub die einzelnen Daten raus zuholen.
Gibt's da evtl auch eine elegantere Möglichkeit?

MfG Hans
Gast #3964719
Lesenswert?

Versuch möglichst nicht, Tabs zu suchen und die Zeile dann händisch zu 
zerschnippeln - ist langsam und fehleranfällig.  Deine Freunde sind gsub 
und match und deren Captures.

Hier mal zwei Beispiele:
1
-- Variable Anzahl Felder, numeriert: lines[zeilen_nummer][feld_nummer]
2
local lines = {}
3
for line in io.lines"/tmp/logfile" do
4
    local fields = {}
5
    string.gsub(line, "[^\t]+", function(s) fields[#fields+1] = s end)
6
    lines[#lines+1] = fields
7
end
1
-- Feste Anzahl Felder, benamt: lines[zeilen_nummer].time/.level/.msg
2
local lines = {}
3
for line in io.lines"/tmp/logfile" do
4
    local a,b,c = string.match(line, "^(.-)\t(.-)\t(.*)")
5
    if a then
6
        lines[#lines+1] = { time=a, level=b, msg=c }
7
        -- lines[#lines+1] = { a,b,c } -- numeriert, 1, 2 und 3
8
    end 
9
end
Gast #3968688
Lesenswert?

Hi und danke für foobar für deine Antwort.
Habe mir jetzt mit einer string.split Funktion, die ich im Netz gefunden 
hab eine kleine Routine geschrieben und als Return bekomm ich ein table 
, wie ichs brauch:
numerische Indizes, und jedes Indizes beinhaltet als table eine zerlegt 
Logfilezeile.
Kann den Code hier, wenn gewünscht, hoch laden. Ist nicht viel ;)

Grüße Hans

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren