![]() |
Re: StringReplace und doppelte Leerzeichen
Also mit diesem Thread habt Ihr mir schon ungemein geholfen.
Aber wo schon so ein Millisekungen-Run entstanden ist habe ich da noch eine Aufgabe :wink: Vorab, ich werte eine relativ große Webseite bzw. deren Html-code aus. Dafür ist es nötig bestimmte Stellen zu finden, genauer der String der zwischen StringA und StringB steckt. Da ich diese zwei, ich nenne sie mal IdentifierungsStrings aus einer ini lese habe ich sie dort mit einem "|" getrennt... Daher musste ich auch einen String um alle doppelten Leerzeichen erleichtern sowie alle #9 #10 #13 entfernen damit die Identifzierung zuverlässiger ist. So... nun hab ich mir also nen Funktion gebastelt die sehr häufig aufgerufen wird und bestimmt aufgrund der vielen Pos, Copy und Delete Befehle nicht gerade schnell ist. als Variable "s" übergebe ich den Quelltext zB 'Mein Benutzername hier im Forum ist Pichel, mal so als Beispieltext.' und als var "ids" den Identifizierungsstring zB 'Mein Benutzername hier im Forum ist |,' Die Funktion liefert nun 'Pichel' als Result zurück und der Html-Quelltext ist gekürzt auf ' mal so als Beispieltext.' Ich hoffe das war soweit zu verstehen... und hier nun der Code auf das ich noch was lernen kann :thumb:
Delphi-Quellcode:
function GetDataSet(var s: String; ids: String): String;
var id1, id2: String; begin Result := ''; if Pos('|',ids) > 0 then begin // IDs splitten id1 := copy(ids, 1, pred(Pos('|',ids))); id2 := copy(ids, succ(Pos('|', ids)), length(ids)); end else begin id1 := ''; id2 := ids; end; if (id1 = '') or (Pos(id1, s) > 0) then begin if id1 <> '' then delete(s,1,pred(Pos(id1, s)+length(id1))); if (Pos(id2, s) > 0) then begin Result := trim(copy(s, 1, pred(Pos(id2, s)))); delete(s,1,pred(Pos(id2, s)+length(id2))); end; end; end; |
Re: StringReplace und doppelte Leerzeichen
Das hört sich eher an als bräuchtest einen gscheiden Parser!
Wie groß sind deine Seiten denn? Ich würd sie in ein TMemoryStream laden und dann mit einem Pointer drüber gehen, bis dein StartString / StopString erkannt wird ... mfg DerDan |
Re: StringReplace und doppelte Leerzeichen
Zitat:
Zitat:
|
Re: Stringverarbeitung optimieren (split)
Dafür eignet sich der Boyer-Moore Stringmatching-Algorithmus am Besten. Er dürfte auch der Schnellste sein, vor allen Dingen, wenn Du mit ein und dem selben Suchstring öfter suchen tust (autsch).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz