String zerlegen in Lua

Gast #3962289
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.