Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   String vorne mit Nullen auffüllen (https://www.delphipraxis.net/211405-string-vorne-mit-nullen-auffuellen.html)

Rolf Frei 12. Sep 2022 14:27

AW: String vorne mit Nullen auffüllen
 
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.

Dennis07 12. Sep 2022 16:20

AW: String vorne mit Nullen auffüllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1511677)
@Dennis07 Weil meine AnsiString Variante um ein dutzendfach schneller ist.

Dass das einen signifikanten Unterschied macht bezweifle ich. Deshalb habe ich mal einen Speedtest gemacht.

Um ein ein relevantes Ergebnis zu haben habe ich beide Funktionen je 100.000 mal hintereinander mit zufälligen Strings und einem '0'-Zeichen durchlaufen lassen und habe zufällige Einrückungen im selben Spektrum genommen.
Das ganze habe ich 100 mal durchlaufen lassen und den Durchschnitt gebildet.

Die Ergebnisse siehst du im Anhang. Gerne gebe ich dir den Quelltext, damit du es selbst probieren kannst.

FillString1 ist von dir, FillString2 ist meine Variante. In dem Beispiel war deine um ca. 2 Ticken schneller bei der Aufrufzahl, was mich jetzt nicht überrascht hat. Kann aber auch an ungleichen Zufallszahlen liegen, wer weiß.
Es geht mir jetzt halt nicht darum, deinen Code schlecht zu reden oder so, nichts läge mir ferner. Aber ich wollte mich selbst davon überzeugen, dass der unter Win32 auf keinen Fall "dutzendfach langsamer" ist. Selbst, wenn meiner jetzt schneller wäre, würden wir hier von durchschnittlich zwei Ticks pro 100.000 Aufrufen sprechen, was in so ziemlich allen Anwendungsgebieten wohl kaum ins Gewicht fallen würde.

Dennis07 12. Sep 2022 16:29

AW: String vorne mit Nullen auffüllen
 
Zitat:

Zitat von Rolf Frei (Beitrag 1511683)
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.

Habe ich nicht, CodeZwerg hatte das schon so, ich habe nur mal eben den Body neu geschrieben. Wie ich aber jetzt sehe, hast du ja auch eine ähnliche Lösung vorgeschlagen.

Uwe Raabe 12. Sep 2022 16:33

AW: String vorne mit Nullen auffüllen
 
Zitat:

Zitat von Dennis07 (Beitrag 1511700)
Kann aber auch an ungleichen Zufallszahlen liegen, wer weiß.

Ermittele mal die Zufallszahlen vorher und schreibe die in ein Array. Zum Einen bekommst du dann besser vergleichbare Ergebnisse und zum Anderen fließt die Zeit für die Random-Aufrufe nicht in die Messung mit ein.

Weiterhin würde ich TStopWatch zur Messung nehmen. Das ist potentiell genauer.

Rolf Frei 12. Sep 2022 17:14

AW: String vorne mit Nullen auffüllen
 
Zitat:

Zitat von Dennis07 (Beitrag 1511702)
Zitat:

Zitat von Rolf Frei (Beitrag 1511683)
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.

Habe ich nicht, CodeZwerg hatte das schon so, ich habe nur mal eben den Body neu geschrieben. Wie ich aber jetzt sehe, hast du ja auch eine ähnliche Lösung vorgeschlagen.

Ah ok. Habe mich halt immer nur auf den originalen Post des Threaderstellers konzentriert und da nur die Zeile die einen AV produziert hat, geändert. Wieso da auf einmal AnsiString in das Problem des OP reinkommt ist mir rätselhaft. Die Lösung mit StringOfChar ist doch die einfachste und beste für seine Anforderung. Ich bezweifle, dass der OP diesen Code 1 Mio. mal möglichst schnell ausführen will. Selbst wenn das pro Sekunde 1000 mal gemacht wird, gibt es kaum einen nennenswerten Unterschied. Wenn dann noch die Konvertierung String zu AnsiString und retour, dazu kommt, ist vermultich der ganze Vorteil eh wieder weg, mal ganz davon abgesehen von den womöglich verlorenen Ansizeichen.

himitsu 12. Sep 2022 17:21

AW: String vorne mit Nullen auffüllen
 
Die "Einfachste" ist doch wohl eher Delphi-Referenz durchsuchenPadLeft :angle:
oder bei "Integer" ansatt String, das mit dem Format.

https://www.delphipraxis.net/211405-...ml#post1511610
https://www.delphipraxis.net/211405-...ml#post1511623


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.
Seite 3 von 3     123   

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