Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringReplace und doppelte Leerzeichen (https://www.delphipraxis.net/67152-stringreplace-und-doppelte-leerzeichen.html)

Pichel 11. Apr 2006 14:13

Re: StringReplace und doppelte Leerzeichen
 
Ey... Leute....

Seid Ihr verrückt ;) (ich meine das absolut nett) :angel:

Es ist ja jetzt fast ein Wettstreit um die schnellste Funktion entstanden. Nein nicht nur fast, es ist.

Warum macht man daraus nicht gleich einen kompletten StringReplace Ersatz, denn das einzige was man zu StringReplace in den Foren findet ist, daß es "*rschlahm" ist :wink:

Ich würde mich gerne auch noch weiter produktiv an diesem Thema beteiligen, aber hier seid Ihr bereits so weit das ich da besser nur noch interessiert lese und lerne.

DerDan 11. Apr 2006 14:19

Re: StringReplace und doppelte Leerzeichen
 
Code:
Zeit1(   36,34 ms)/Zeit2    81,83% =  -18,17% (SirThornberry)
Zeit2(   44,41 ms)/Zeit2   100,00%             (sakura)
Zeit3(   34,89 ms)/Zeit2    78,57% =  -21,43% (jbg)
Zeit4(   29,93 ms)/Zeit2    67,41% =  -32,59% (DerDan)
Zeit5(   34,20 ms)/Zeit2    77,01% =  -22,99% (Elvis)
Ich habs mit der Testsuite von sakure aus einem der 1. Beiträge getestet (#7)

Tatsächlich sollte man mal richtige Testdaten Haben ...


mfg

DerDan

jbg 11. Apr 2006 14:35

Re: StringReplace und doppelte Leerzeichen
 
Zitat:

Zitat von Pichel
Warum macht man daraus nicht gleich einen kompletten StringReplace Ersatz, denn das einzige was man zu StringReplace in den Foren findet ist, daß es "*rschlahm" ist :wink:

Warum das Rad neu erfinden:

AnsiStringReplace vom FastCode Projekt sollte reichen. Schneller wird es wohl nicht gehen.

DerDan 11. Apr 2006 14:40

Re: StringReplace und doppelte Leerzeichen
 
Code:
Zeit1(   96,32 ms)/Zeit2    94,11% =   -5,89% (SirThornberry)
Zeit2(  102,35 ms)/Zeit2   100,00%             (sakura)
Zeit3(   90,74 ms)/Zeit2    88,66% =  -11,34% (jbg)
Zeit4(   72,29 ms)/Zeit2    70,64% =  -29,36% (DerDan)
Zeit5(   78,48 ms)/Zeit2    76,68% =  -23,32% (Elvis)

Testergebins mit einem Pascal Quelltext,

wie man sieht alles stark von den Eingangsdaten abhängig


mfg

derDan

Wer misst misst mist:


ich habe meinen Quelltext nochmals überprüft und festgestellt, dass
ich Zeit3 und Zeit 4 vertauscht habe:

korrekt ist das:

Code:
Zeit1(  378,25 ms)/Zeit2    88,62% =  -11,38% (SirThornberry)
Zeit2(  426,82 ms)/Zeit2   100,00%             (sakura)
Zeit3(  371,47 ms)/Zeit2    87,03% =  -12,97% (DerDan)
Zeit4(  317,78 ms)/Zeit2    74,45% =  -25,55% (jbg)
Zeit5(  345,66 ms)/Zeit2    80,98% =  -19,02% (Elvis)

Sorry vielmals

und Danke an Elvis der mir eine PN geschickt hat und ich daraufhin nochmals getestet habe
und meinen Fehler gefunden habe.

DerDan

alzaimar 12. Apr 2006 09:08

Re: StringReplace und doppelte Leerzeichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Etwas verspätet, aber hier eine kleine Vergleichsgrafik. Erstellt wurden 5 Randomstrings (10 Mio Zeichen) mit mehr oder weniger häufigen doppelten Leerzeichen. Das Laufzeitverhalten ist stark Abhängig von der Häufigkeit. Lustigerweise kommt man dann zu anderen Ergebnissen, zumindest auf einem AMD.
http://www.edwebservice.de/uploads/ab0cabdd5f.bmp

Fuchtel 12. Apr 2006 09:28

Re: StringReplace und doppelte Leerzeichen
 
Hallo alzamir,

ist ganz hübsch, erinnert mich irgendwie an eine Gaussche Normalverteilung (mit 0 Punkt bei 50%).

Wenn Du jetzt noch die einzelnen Algorithmen der RemoveDblSpaces Functionen zum rauskopieren mit einbauen wuerdest, dann könnte jeder nach seiner CPU und abgeschätzten Prozentanteil, die passende Function gleich übernehmen.

Oder veröffentliche doch gleich den Quelltext.

Gruß Fuchtel

Elvis 12. Apr 2006 09:44

Re: StringReplace und doppelte Leerzeichen
 
Wieviel schulde ich dir für die Statistik? :mrgreen:
btw: Wie ich bereits angedeutet habe, packt mal irgendwo ein #0 in den String und probiert es noch mal. :twisted:
Meins ist zwar eigentlich eine Kopie von alzaimars Code, bei mir muss aber ein Integer anstatt einem Byte verglichen werden[1], dafür stopt die Funktion nicht beim ersten #0.
Es ist aber möglich, dass meine mit weniger Operationen auskommt wenn die Anzahl der aufeinander folgenden Doubletten steigt[2].

Fazit: Mal wieder eine nette Exkursion zurück in unmanaged, pointerverseuchte Gefilde. :stupid:

[1] Adresse hinter dem letzten Zeichen vs #0
[2] Solange muss sie ja nicht gegen die aktuelle Position prüfen.

alzaimar 12. Apr 2006 10:01

Re: StringReplace und doppelte Leerzeichen
 
Zitat:

Zitat von Fuchtel
Oder veröffentliche doch gleich den Quelltext

Ja, könnte ich machen, aber die Routinen stehen hier doch sowieso alle...
@Elvis: Schulden werden per :cheers: beglichen. :mrgreen:

Fuchtel 12. Apr 2006 10:37

Re: StringReplace und doppelte Leerzeichen
 
Hallo alzaimar,

nein, ich meinte, um die Option in dein Vergleichschart einzubauen, anhand des Ergebnisses
die passende Funktion von dort gleich in die Zwischenablage zu Übernehmen.

Gruß Fuchtel

Elvis 12. Apr 2006 10:44

Re: StringReplace und doppelte Leerzeichen
 
Zitat:

Zitat von Fuchtel
Hallo alzaimar,

nein, ich meinte, um die Option in dein Vergleichschart einzubauen, anhand des Ergebnisses
die passende Funktion von dort gleich in die Zwischenablage zu Übernehmen.

Wozu soll das gut sein? :gruebel:
Du würdest eigentlich nur 2 Funktionen brauchen. Eine, die besser mit Mini-Strings umgehen kann und eine für den Rest. Die für den Rest wird wohl immer noch schnell genug für die meisten Anwendungen von Mini-Strings sein. ;)

Ich denke nicht, dass alzaimar so offensichtlich Copy&Waste-"Programmierer" unterstützen würde. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz