AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Was ist schneller? function oder 3x stringreplace?
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist schneller? function oder 3x stringreplace?

Ein Thema von Helmi · begonnen am 3. Jul 2005 · letzter Beitrag vom 24. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:05
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?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:12
HI!

Ich vermute(!) Version 1, da Stringreplace wohl auch über das komplette "Array" läuft und dann eben 3x drüber muss.

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#4

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:14
Edit: Unsinn entfernt. Ich brauch 'ne Brille
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:30
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 !!
Gruß
Hansa
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:41
Ich habe nur Delphi 5, Hansa, und bei mir ist Delphi-Referenz durchsuchenStringReplace auch lahm.
Also, wie jetzt?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 22:57
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..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 23:00
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 23:04
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;
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#10

Re: Was ist schneller? function oder 3x stringreplace?

  Alt 3. Jul 2005, 23:21
@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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 +1. Es ist jetzt 22:32 Uhr.
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