AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Datei mit RegEx parsen - wie generell vorgehen? Performance

Datei mit RegEx parsen - wie generell vorgehen? Performance

Ein Thema von Pilloker · begonnen am 9. Mai 2009 · letzter Beitrag vom 14. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2   
Pilloker
(Gast)

n/a Beiträge
 
#1

Datei mit RegEx parsen - wie generell vorgehen? Performance

  Alt 9. Mai 2009, 14:44
Hallo,

ich habe eine allgemeine Frage zum Parsen einer Textdatei mittels regulärer Ausdrücke.
Beispiel: Die Einträge einer Logdatei (wie auch immer die aussehen mag - ist erstmal irrelevant) sollen in ein neues Format gebracht werden.
Wie geht man hier am besten vor?

Die einzige Möglichkeit, die mir einfällt, wäre folgende:
Ich gehe die Datei in einer Schleife Zeile für Zeile durch und vergleiche dann die aktuelle Zeile widerrum in einer Schleife mit allen möglichen von mir definierten Regulären Ausdrücken. Habe ich einen Treffer schreibe ich die Zeile weg und nehme mir die nächste Zeile vor.

Ich habe also zwei Zwei Schleifen und gehe jedesmal unter Umständen alle vordefinierten Regulären Ausdrücke durch; jedenfalls so lange, bis ich einen Treffer habe.

Ist dieses Vorgehen in Ordnung? Kann man etwas anders/besser machen? Oder geht soetwas ganz anders?

Wie sieht es mit Performance aus? Gibt es etwas schnelleres?

Wichtig ist mir das Ganze unter Verwendung Regulärer Ausdrücke.

Danke.
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#2

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 11. Mai 2009, 07:27
Hat denn niemand eine Meinung dazu? Mich würde es auch interessieren, wie Ihr da so vorgeht.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 11. Mai 2009, 08:12
Schneller geht es in jedem Fall: Google mal nach 'multi pattern matching'.
Wenn Du allerdings nach mehreren regulären Ausdrücken (also keine festen Texte) suchen musst, könnte ich mir vorstellen, das eine NDEA (Nichtdeterministischer endlicher Automat) hier gute Dienste leisten würde. Ob es schneller geht, weiss ich nicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 11. Mai 2009, 09:10
Zitat von worker:
Hat denn niemand eine Meinung dazu? Mich würde es auch interessieren, wie Ihr da so vorgeht.
Hallo,

ich programmiere mir dazu eine Klassenhierarchie, z.B. für die schon ziemlich komplexe Definition einer Leiterplatte. Dazu gibt es ein Root-Objekt, und die Datei fängt ja auch mit einem Objekt "PCB" an. Wenn ich dem Rootobjekt einen Datenamen übergebe, wird die Datei gelesen - das Objekt PCB weiss welche Unterobjekte (Assignments, Library, Components...) enthalten sein können: kommt da Library, so wird ein Unterobjekt angehängt, das die Subklasse Library hat und seinerseits die Datei weiterliest und z.B. Footprint findet, dann wird ein Objekt Footprint angehängt usw. usw.

Jede Subklasse weiss, was an Daten enthalten sein kann, z.B. kann ein Footprint beliebig viele Pads enthalten und diese jeweils X und Y Koordinaten, Drehwinkel, Bohrdurchmesser usw. Ein Drehwinkel ist dabei ein generisches Objekt (weil er in der Textdatei auch immer gleich formatiert ist) und hat in dem Fall als Parent eben das Pad. Unbekannte Definitionen werden bis zum Ende gelesen und ignoriert, das erleichtert die Entwicklung und macht die Software sehr robust.

Langer Rede kurzer Sinn: Mit Root-Objekt und Assign einer Datei entsteht von selbst ein Object Tree, der die Leiterplatte komplett repräsentiert, auch wenn sie 100000 Details enthält. Dabei stecken Syntax und Semantik der Datei in der Klassenhierarchie, während sich die Struktur der Leiterplatte im Object Tree abbildet, den man anschliessend weiterverarbeitet. Hat sich auch als pflegefreundlich erwiesen, wenn z.B. bei den Bauteilen ein "Wert" zusätzlich definiert wird, so füge ich in der Subklasse Component dem Suchen nach Details den Case "Value" zu und dazu wird eine neue Subklasse Value definiert, die ihrerseits einen Text in Anführungszeichen einliest (Standardmethode) oder was auch immer.

Mehr anzuführen hat hier keinen Sinn, ist ja auch kein Delphi-Thema.

Gruss Reinhard
  Mit Zitat antworten Zitat
Pilloker
(Gast)

n/a Beiträge
 
#5

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 11. Mai 2009, 20:33
Danke.

Werde mal sehen, was ich davon gebrauchen kann

Hat jemand weitere Vorschläge?
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#6

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 12. Mai 2009, 07:48
Das mit der Klassenhierarchie hört sich interessant an. Auch wenn die Ursprungsdaten da ja schon irgendwie hierarchisch vorliegen müssen.

Was ist aber bei einer Logdatei, die willkürlich nacheinander bestimmte Ereignisse (die bekannt sind) auflistet?
Nehmen wir mal als Beispiel das Eventlog.
Zitat:
[...]
bcm4sbxp
Service Control Manager
Ereignis_1
DCOM
Ereignis_7
Ereignis_14
Ereignis
VMnetuserif
bcm4sbxp
DCOM
DCOM
eventlog
srservice
Ereignis_17
LsaSrv
Service Control Manager
[...]
Da würde das Beispiel mit dem sich automatisch generierenden ObjectTree ja nicht funktionieren.
Hier sehe ich nur die Möglichkeit, die von Pilloker genannten Schleifen einzusetzen.

Zu Multi Pattern Matching habe ich bisher noch nicht viel erquickendes finden können.
  Mit Zitat antworten Zitat
Pilloker
(Gast)

n/a Beiträge
 
#7

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 13. Mai 2009, 15:22
Ich habe zu 'Multi Pattern Matching' leider auch nichts finden können, was mich irgendwie weiter bringt; außer irgendwelcher mathematischen Abhandlungen

@alzaimar
Hast Du eine Quelle, die mir weiterhelfen könnte?
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 13. Mai 2009, 17:25
Zitat von worker:
Das mit der Klassenhierarchie hört sich interessant an. Auch wenn die Ursprungsdaten da ja schon irgendwie hierarchisch vorliegen müssen.

Was ist aber bei einer Logdatei, die willkürlich nacheinander bestimmte Ereignisse (die bekannt sind) auflistet?
...
Da würde das Beispiel mit dem sich automatisch generierenden ObjectTree ja nicht funktionieren.
....
Hi,

soweit ich das auf Anhieb übersehen kann, würde es schon funktionieren, nur gibt es keinen Tree, weil es halt keiner ist - das Ergebnis wäre eine lineare Liste von Objekten, die jeweils dem Ereignis entsprechen. Was auch immer man damit anfängt. Ich schätze mal, eine andere Methode liefert auch nichts anderes, weil das Ganze eben keine hierarchische Struktur hat.

Übersetzen könnte man gut damit (dafür habe ich es ja entwickelt), wenn jede Subklasse (=Log Event) weiss, wie sie im Zielformat auszugeben ist.

Gruss Reinhard
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#9

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 14. Mai 2009, 09:08
Hallo Reinhard,

aber dennoch musst Du bei Deinem Vorgehen, egal ob als Ergebnis eine lineare Objektliste oder ein Tree dabei herauskommen, so vorgehen, wie von Pilloker beschrieben.

Sprich, Du musst

1. Die Datei von vorne bis hinten durchrattern. Das enspricht
Zitat von Pilloker:
[...]
Ich gehe die Datei in einer Schleife Zeile für Zeile durch
[...]
2. Bei jeder Zeile schauen, welches der bekannten Unterobjekte sie enthält. Das entspricht
Zitat von Pilloker:
[...]
und vergleiche dann die aktuelle Zeile widerrum in einer Schleife mit allen möglichen von mir definierten Regulären Ausdrücken. Habe ich einen Treffer schreibe ich die Zeile weg und nehme mir die nächste Zeile vor.
[...]
Oder sehe ich das falsch?

Als Alternative käme aus meiner Sicht nur das von alzaimar genannte 'Multi Pattern Matching' in Frage (hört sich von der Begrifflichkeit zumindest so an, als ob das eine Lösung sein könnte).

Leider hat sich alzaimar noch nicht zu einer Quelle geäußert
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#10

Re: Datei mit RegEx parsen - wie generell vorgehen? Performa

  Alt 14. Mai 2009, 12:26
Zitat von worker:
Hallo Reinhard,

aber dennoch musst Du bei Deinem Vorgehen, egal ob als Ergebnis eine lineare Objektliste oder ein Tree dabei herauskommen, so vorgehen, wie von Pilloker beschrieben.
Hallo,

Vergleiche einzusparen war nicht meine Absicht, sofern das überhaupt theoretisch geht. Ich wollte eine gut strukturierte Software schreiben.

Soweit ich weiss kann MPM Stichwörter in Texten effektiv finden, aber die Methode prüft keine Syntax - ich könnte also feststellen, dass das Token "Pad" 5000 mal vorkommt, aber ich wüsste nicht, welches Pad zu welchem Bauteil gehört oder welche x-Koordinate zu welchem Pad. Es ist sicher verständlich, dass das eine lebenswichtige Information ist.

Gruss Reinhard
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz