Ersetzen von Zeichen in einem String beschleunigen
-
Hallo,
Mein Programm macht folgendes: Es öffnet eine Website und holt sich den Quelltext. die ganzen HTML Formatierungen werden weggeschnitten, sodass der reine Text übrig bleibt. Dieser Text wird dann als RTF gespeichert. Dafür müssen natürlich noch die ganzen HTML sonderzeichen umgewandelt werden, sodass sie im RTF File richtig dargestellt werden. Soweit kein Problem. Da es aber je nach Länge des Textes mehrere Tausend Sonderzeichen sind und die Umwandlung dann auch mit einem schnellen PC einige ZEit brauchen kann, wollte ich fragen ob man das irgendwie beschleunigen kann.
Bisher läuft es so:
-Sonderzeichen wird innerhalb einer Schleife mit AnsiPos gesucht
-Sonderzeichen wird gelöscht (delete(x))
-Zeichen wird als entsprechender HexCode ö.ä. für RTF eingefügt
Die schleife läuft so lange, bis alle Sonderzeichen dieses Types gewandelt sind, dann kommt das nächste dran.Lässt sich das irgndwie optimieren um Zeit zu spaaren?
Grund für meine Frage ist, dass ich neulich ein C# seminar hatte, und wir dort testweise mit normalen String operatoren gearbeitet haben, und danach mit diesem Stringbeschleuniger (Append...) der bis zu 20 mal schneller war.
mfg
Rai
-
Nimm doch StringReplace, dürfte allemal schneller sein als so ein Pos Gefrickel.
-
Dankeschön,
habs eben mal getestet.
Mit jeweils 10.000 Ersetzungen
StringReplace benötigt 2 Sekunden
Suchen, Löschen und einfügen benötigt 8 SecSomit ist das schonmal um das 4-fache schneller.
Geht es aber vielleicht noch schneller?
mfg
Rai
-
1. Text in ein Quell- char- Array kopieren
2. Ziel- char- Array anlegen - sollte ev. etwas länger sein
3. StartInd auf Anfang
4. Ind durchlaufen lassen und auf Sonderzeichen testen
(bei mehreren "Suchzeichen":
beim ersten Zeichen halten und mit zweitem Index weitersuchen.
5. Wenn Treffer:
Quelle von Start bis Treffer kopieren (memcopy)
neue Sequenz als Ersatz anhängen
StartInd nachziehen !!!
wiederholen ab 4.das ist mühselig zu proggen, sollte aber relativ schnell sein.
(oder mit Assembler Sequenzen suchen lassen - frag mich aber nicht nach den Befehlen
, hab lange nix mit Assembler gemacht)Gruss
Frnk