Entwickler-Ecke
Sonstiges (Delphi) - Suche Parser für Delphi
Tobi482 - So 21.10.07 10:21
Titel: Suche Parser für Delphi
Hi Leute,
ich habe Fremddaten in der form
Quelltext
1:
| (item(name 123)(Index 3)(Icon "a.bmp")(Event 1 1)(class file txt)(ex (owner 1 3)(permission 1 2 "rwx")(cdate 194642346))) |
formatiert sieht es so aus
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| (item (name 123) (Index 3) (Icon "a.bmp") (Event 1 1) (class file txt) (ex (owner 1 3) (permission 1 2 "rwx") (cdate 194642346) ) ) |
ich denke, dass sie in eine Structure gehören die ca so aussieht
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| item.name = 123 item.Index = 3 item.Icon = "a.bmp" item.Event.Normal = 1 item.Event.Ex = 1 //??? item.ex.owner.a = 1 imte.ex.owner.b = 3 item.ex.permission.a = 1 item.ex.permission.b = 2 item.ex.permission.c = "rwx" item.ex.cdate = 194642346 |
wobei ich mir bei der einen Zeile nicht sicher bin, da es weder Integer noch Strings sind. Evtl sind es Konstanten oder Sub-Klassen
Gibt es Praser die mir dabei helfen können oder muss ich für diese Art von Formatierung einen eigenen schreiben. Evtl gibt es ja schon eine Unit mit einer Art Multi-Praser. Habe bisher leider noch keinen gefunden. Oder evtl ist dies ja auch ein gängiges Praser Format (ich kenne es nur nicht^^). Ist für mich das erste mal, dass ich mich mit Praser beschäftige. Bitte daher im Rücksicht für meine Unwissenheit
Falls ich einen Praser selber schreiben muss, muss ich ja auch eine Art dynamische Roh-Structure schreiben.
Habe dies bereits versucht bin mit dem Ergebniss aber noch nicht ganz zufrieden
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Type TTParamTyp = (TTByte, TTWord, TTDWord, TTFloat, TTString);
TTPraserItemParam = packed record Name : String; Typ : TTParamTyp; Parameter : Array of Pointer; end;
TTPraserItem = packed record Name : String; Parameter : Array of TTPraserItemParam SubItems : Array of TTPraserItem; end; end; |
Daher meine Fragen:
1. Gibt es einen schon fertigen Praser, der mein Datenformat lesen kann
2. Habt ihr irgendwelche Tips für mich (evtl brauch ich gar keinen Praser)
Mit freundlichen Grüßen
Tobi
Silas - So 21.10.07 11:53
Moin!
So ein Format is mir auch noch nie untergekommen, aber ein Parser sollte recht einfach zu schreiben sein.
Ich würd die Datei einfach zeichen für zeichen durchgehen. Für die Klammern würd ich einen Stack verwenden, weil sie verschachtelt sein können. Dann denk ich brauchst du eine Variable die speichert, ob du dich in einem String (") befindest (wegen der Leerzeichen).
Nach einer Klammer ist das erste Nicht-Whitespace-Zeichen der Name, und durch ein oder mehrere Whitespaces getrennt folgen die Parameter. (Bei Strings musst du Whitespaces und Anführungszeichen natürlich ignorieren).
Bei den Datentypen würd ich nur String, LongInt und Extended verwenden (du weißt ja nicht, was gemeint ist und zuviel ist besser als zuwenig :) (es sei denn, deine Datei ist ein paar GB groß). Alles was nur Ziffern + Vorzeichen hat ist ein LongInt, das ganze mit "." ist ein Extended (evtl. auch mit "f" hinten dran, ist auch recht üblich). Alles andere wäre dann ein String.
Bei deinem Quelltext is mir was aufgefallen: Bei dir hat jeder Parameter einen Namen, im Dateibeispiel aber soweit ich das seh nicht. Ich würde jedes () als eigenes Item ansehen, das macht das Parsen einfacher.
Tobi482 - So 21.10.07 16:11
Hi,
Danke für deine Antwort. Schade, dachte es gäbe einen Parser dafür.
Ok werde deinen Rat beflogen und den Namen für jedes Parameter löschen.
Ist ja auch einfacher so :D
Gut dann nochmla ein danke schön für die schnelle Antwort :)
Mit freundlichen Grüßen
Tobi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!