Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Was ist schneller? function oder 3x stringreplace? (https://www.delphipraxis.net/48979-ist-schneller-function-oder-3x-stringreplace.html)

Helmi 3. Jul 2005 21:05


Was ist schneller? function oder 3x stringreplace?
 
Hallo,

ich hab mal wieder eine Frage!

was ist schneller - diese Function:
Delphi-Quellcode:
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;
oder diese 3 StringReplace´s:

Delphi-Quellcode:
  S := MaskEdit_Anrufe.EditText;
  S := StringReplace(S, '(', '', [rfReplaceAll]);
  S := StringReplace(S, ')', '', [rfReplaceAll]);
  S := StringReplace(S, ' ', '', [rfReplaceAll]);
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.

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?

MathiasSimmack 3. Jul 2005 21:12

Re: Was ist schneller? function oder 3x stringreplace?
 
Auf keinen Fall Delphi-Referenz durchsuchenStringReplace. Ich bin zwar nicht firm in Sachen Funktionsanalyse (bezogen auf die Geschwindigkeit), aber Delphi-Referenz durchsuchenStringReplace war schon immer a****langsam.

fkerber 3. Jul 2005 21:12

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

malo 3. Jul 2005 21:14

Re: Was ist schneller? function oder 3x stringreplace?
 
Edit: Unsinn entfernt. Ich brauch 'ne Brille ;)

Hansa 3. Jul 2005 21:30

Re: Was ist schneller? function oder 3x stringreplace?
 
Wenn ich das hier lese :
Zitat:

Delphi 7 Professional
dann würde ich mal im Source nachgucken ! SysUtils.Pas vermutlich. Aber ehrlich gesagt : würde das nur untersuchen, wenn es um ein gigantisches Programm handelt !!

MathiasSimmack 3. Jul 2005 21:41

Re: Was ist schneller? function oder 3x stringreplace?
 
Ich habe nur Delphi 5, Hansa, und bei mir ist Delphi-Referenz durchsuchenStringReplace auch lahm.
Also, wie jetzt? :gruebel:

SirThornberry 3. Jul 2005 21:57

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..

Helmi 3. Jul 2005 22:00

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.

Robert_G 3. Jul 2005 22:04

Re: Was ist schneller? function oder 3x stringreplace?
 
Generell dürfte ein Besuche bei den Bei Google suchenFastcoders einen Versuch Wert sein.

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;

scp 3. Jul 2005 22:21

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.
Seite 1 von 3  1 23      

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