Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Parser / Performance-Aspekte
longhugo - Di 27.09.05 07:40
Titel: Parser / Performance-Aspekte
Hi Leute,
ich habe folgende Aufgabe: Es gibt einen Plain Text, in dem verschiedene
Sätze mit einem Marker gekennzeichnet sind. Der Marker hat immer den gleichen
Inhalt. Also z.B.: [Marker]Hier ist der erste Text[Marker]Hier kommt
wieder ein Stücktext[Marker]und so weiter.
Meine Frage: Was ist der optimale und performanteste Algorithmus, mit
dem ich den Text parse und die Marker finde, so dass ich den folgenden Text
extrahieren kann. Die Textdatei kann bis zu 100kb Plaintext sein.
Ist es am schnellsten mit Pos, mit Strcomp oder ggf. mit TParser oder doch
lieber mit 'nem Pointer? Sollte die Textdatei einem String zugeordnet werden
oder ist TStringStream oder TMemoryStream am schnellsten? Hat jemand damit Erfahrungen
gemacht? und wenn ja ggf. einen Codeschnipsel?
Viele Grüße
Hugo
arj - Di 27.09.05 08:14
Wenn es dir einfach nur darum geht diese Stellen herauszufinden sehe ich mehrere Möglichkeiten:
- String-Such-Algorithmen (Boyle-Moore,...) -> Müsste ziemlich flott sein.
- RegExp (Performance keine Ahnung, müsste man testen)
Ich würde den Text blockweise aus der Datei lesen (und dabei überprüfen ob du nicht zufällig gerade einen Marker in der Mitte getrennt hast :)) eventuell mit MMF (aber ob das soviel bringt kann ich dir auch nicht sagen), dann eine der obigen Methoden anwenden und jeden gefundenen in eine StringList schreiben. Wäre für mich das performanteste.
alzaimar - Di 27.09.05 15:40
arj hat folgendes geschrieben: |
- String-Such-Algorithmen (Boyle-Moore,...) -> Müsste ziemlich flott sein.
- RegExp (Performance keine Ahnung, müsste man testen)
|
Das Ding heisst Boyer-Moore (nur damit googel was ausspuckt). RegExp sind nur dann schnell, wenn sie als DEA implementiert sind, sonst nicht so sehr. Andere Suchalgorithmen wäre KMP (Knuth-Morris-Pratt).
Such mal nacht FastStrings.pas bei den Schwyzern
http://www.swissdelphicenter.ch oder bei torry oder den DSP. Das hat, glaube ich, sowas dabei... Warte mal... stimmt, ist dabei
http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=4
{Edit]
Ich würde Die Datei in einen Stream einlesen und mal schauen, ob ich Boyer-Moore direkt auf den Stream ansetzen kann. Wenn nicht, dann kopier den Filestream in einen Stringstream und setz BM auf den DataString an.
[/edit]
Viel spass.
longhugo - Mi 28.09.05 14:22
Faststrings ist echt optimal...danke für den Tipp...nu geht das ratz-fatz!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!