![]() |
Was ist schneller? function oder 3x stringreplace?
Hallo,
ich hab mal wieder eine Frage! was ist schneller - diese Function:
Delphi-Quellcode:
oder diese 3 StringReplace´s:
function ZahlAusString(const S: string): string;
var i, j: Integer; begin SetLength(Result, Length(S)); j := 0; for i := 1 to Length(S) do If S[i] in ['0'..'9'] then begin Inc(j); Result[j] := S[i]; end; SetLength(Result, j); end;
Delphi-Quellcode:
Der Hintergrund ist, dass ich ein Editfeld habe, indem eine Telefonnummer steht, dessen Vorwahl in Klammern steht und nach der letzten Klammer und der eigentlichen Nummer ein Leerzeichen ist.
S := MaskEdit_Anrufe.EditText;
S := StringReplace(S, '(', '', [rfReplaceAll]); S := StringReplace(S, ')', '', [rfReplaceAll]); S := StringReplace(S, ' ', '', [rfReplaceAll]); In meinem Code vergleich ich einen String, in dem die gesamte Telefonnummer (inkl. Vorwahl) ohne Klammern und Leerzeichen steht, mit dem Eingabefeld. Deshalb würds mich interessieren was schneller ist - die Function oder die 3 StringReplace´s. Ich schätze die Function - was meint ihr? |
Re: Was ist schneller? function oder 3x stringreplace?
Auf keinen Fall
![]() ![]() |
Re: Was ist schneller? function oder 3x stringreplace?
HI!
Ich vermute(!) Version 1, da Stringreplace wohl auch über das komplette "Array" läuft und dann eben 3x drüber muss. Ciao Frederic |
Re: Was ist schneller? function oder 3x stringreplace?
Edit: Unsinn entfernt. Ich brauch 'ne Brille ;)
|
Re: Was ist schneller? function oder 3x stringreplace?
Wenn ich das hier lese :
Zitat:
|
Re: Was ist schneller? function oder 3x stringreplace?
|
Re: Was ist schneller? function oder 3x stringreplace?
stringreplace sollte auf jeden fall langsamer sein da es allgemein gehalten ist. außerdem würdest du mit stringreplace wie schon gepostet das ganze 3 mal durchgehen, bei deiner variante allerdings nur einmal..
|
Re: Was ist schneller? function oder 3x stringreplace?
danke für eure Antworten!
ich hab mir mal den Code vom "StringReplace" angeschaut und dort ist auch eine Schleife enthalten. Wenn ich also nun StringReplace 3 mal aufrufe, läuft die Schleife auch 3 mal. Bei meiner Function nur einmal! Ich hab jetzt meinen Code auf meine Function umgeschrieben. |
Re: Was ist schneller? function oder 3x stringreplace?
Generell dürfte ein Besuche bei den
![]() Bei deiner Funktion fällt mir auf, dass du die Größe des Strings 2-mal besetzt und Zum Iterieren durch einen string eignet sich ein PChar ganz gut. ;)
Delphi-Quellcode:
function ZahlAusString(const aSearchString: string): string;
var i : Integer; CurrentChar : PChar; NumberFound : Boolean; NumberStart : Integer; NumberLength : Integer; begin NumberFound := False; NumberStart := -1; NumberLength := 0; CurrentChar := PChar(aSearchString); for i := 1 to Length(aSearchString) do begin if CurrentChar^ in ['0'..'9'] then begin inc(NumberLength); if not NumberFound then begin NumberStart := i; NumberFound := True; end; end else if NumberFound then break; inc(CurrentChar); end; if NumberFound then result := Copy(aSearchString, NumberStart, NumberLength) else result := ''; end; |
Re: Was ist schneller? function oder 3x stringreplace?
@Robert_G
Da fehlt noch ein Break oder ähnliches, sonst wird nämlich aus "(02622) 1234" einfach nur "02622) 1234". Sprich sobald NumberFound true ist müsste bei der nächsten "Nichtziffer" gestoppt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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