AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi schnelleres StringReplace und MultiStringReplace

schnelleres StringReplace und MultiStringReplace

Ein Thema von himitsu · begonnen am 20. Nov 2009 · letzter Beitrag vom 17. Mär 2016
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.382 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: schnelleres StringReplace und MultiStringReplace

  Alt 22. Nov 2009, 11:18
Im Post #1 wurde noch eine neuer Abschnitt eingefügt ... siehe "Ein Vorteil der gemeinsamen Ersetzung:"
'Old1' => '<New1 Old2>'
'Old2' => '<New2 Old1>'

Text old1 old2 Old1 Old2 old1 old2 Old1 Old2 Text
Text old1 old2 <New1 Old2> <New2 Old1> old1 old2 Old1 Old2 Text
Text old1 old2 <New1 <New2 Old1>> Old2 old1 old2 Old1 Old2 Text
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von mkinzler (10. Jun 2010 um 10:21 Uhr) Grund: PRE-Tag entfernt
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#12

Re: schnelleres StringReplace und MultiStringReplace

  Alt 22. Nov 2009, 12:01
Hi himitsu,

das neue Flag funktioniert einwandfrei! Jetzt ist es ein vollwertiger Ersatz für das originale StringReplace.

Danke,
Stefan
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: schnelleres StringReplace und MultiStringReplace

  Alt 7. Jun 2010, 22:44
Hallo himitsu,

entschuldige, dass ich diesen etwas älteren Fred nochmal aufwärmen muss, bin aber auf einen Fehler/Exception gestoßen, die ich einfach nicht weg kriege.

Es wird immer eine Exception geschmissen, wenn im Suchstring das zu ersetzende Pattern ganz am Ende steht:
Erste Gelegenheit für Exception bei $75669617. Exception-Klasse ERangeError mit Meldung 'Fehler bei Bereichsprüfung'

in der Zeile: Move(S[i], Result[i2], i4 * SizeOf(Char)); Hier der Test-Code zum Nachvollziehen:
Delphi-Quellcode:
  dummy:='Text Old';
  ergebnis := StrRep.StringReplace(dummy, 'Old', 'New', [rfReplaceAll]);
  Assert(ergebnis='Text New');
Steht der Text am Anfang oder irgendwo in der Mitte (es folgt also noch mindestens ein Buchstabe), so läuft die Funktion einwandfrei.

Vielleicht kannst du mich/uns erhellen...

Danke,
Stefan
Stefan

Geändert von GPRSNerd ( 8. Jun 2010 um 21:59 Uhr) Grund: Details zur Exception hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.382 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 13:12
Hmmm, hast du mal einen TestString parat?
Mir ist grade aufgefallen, daß in meinem Testcode das Pattern auch schon am Ende des Strings liegt.

und ebenso hier tritt kein Fehler auf.
Delphi-Quellcode:
S := '123Wort';
S2 := StringReplace(S, 'Wort', 'xxx', [rfReplaceAll]);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 13:39
Steht doch oben als Delphi Code!

Ich benutze Delphi 2010 und du?
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 13:45
Dein Beispiel knallt bei mir auch!

exception number : 1
exception class : ERangeError
exception message : Range check error.

main thread ($17c4):
005376bc +03dc STGCommonUnitTest.exe StrRep 132 +37 StringReplace
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.382 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 13:51
Das hatte ich vorhin auch zum Testen verwendet.

Welche Version nutzt du denn?
Die _300 aus Beitrag #1 sollte die aktuellere Version 1.1 vom 20.11.2009 22°° sein.
(is'n bissl blöd, das mit den nun fehlenden Attachment-Kommentaren und den veränderten Dateinamen)



Ich teste gleich nochmal 'n bissl rum.
(bin grade auf die Idee gekommen mal wieder die Bereichsprüfung zu aktiveren )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 13:53
Ich benutze "natürlich" die v1.1.

Wenn ich die Move-Zeile mit einer If-Abfrage auf i4<>0 ändere, geht alles gut:

if i4<>0 then Move(S[i], Result[i2], i4 * SizeOf(Char));
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.382 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 14:01
Jupp, genau sowas hatte ich grade verbaut.

Hach ja, der Fehler ist in meinem aktiven Code nie aufgefallen,
aber dazu sei vielleicht erwähnt, daß der Originalcode eine andere Stringverwaltung via PChar besitzt.

ähhhh ... ich würde es ja gerne Anhängen, aber das geht nicht.

Also bitte vor alle "Move" das "if i4 <> 0 then " einfügen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
230 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: schnelleres StringReplace und MultiStringReplace

  Alt 10. Jun 2010, 14:10
Bin gerade mal Step-by-Step da durchgegangen mit deinem Beispiel mit 123Wort:

i=8
Length(S)=7
i2=7
i4=0

Der Knall kommt dann vom S[i]=S[8] bei einem String mit 7 Zeichen.
Stefan
  Mit Zitat antworten Zitat
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 +2. Es ist jetzt 15:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf