Forum: PC-Programmierung String zerlegen in Lua


von Hans M. (Gast)


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

von foobar (Gast)


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

von Hans M. (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.