Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Robert_G 3. Jul 2005 22:24

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

Zitat von scp
@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.

Ups, da hast du natürlich recht. Ich bessere das gleich aus. ;)

Hansa 3. Jul 2005 23:32

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

Zitat von MathiasSimmack
Ich habe nur Delphi 5, Hansa, und bei mir ist Delphi-Referenz durchsuchenStringReplace auch lahm.
Also, wie jetzt? :gruebel:

Nun ? Ja, wie jetzt ? Wer weiß es ? :mrgreen: Mache mal einen Test.

Helmi 7. Jul 2005 09:06

Re: Was ist schneller? function oder 3x stringreplace?
 
Wieso funktioniert denn das?
Delphi-Quellcode:
   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;
Woher weiss er welcher char in der schleife bearbeitet werden soll?

generic 7. Jul 2005 09:15

Re: Was ist schneller? function oder 3x stringreplace?
 
CurrentChar ist ein zeiger auf das aktuelle zeichen.

inc(CurrentChar) setzt den zeiger eine addresse weiter.

Helmi 7. Jul 2005 09:23

Re: Was ist schneller? function oder 3x stringreplace?
 
Danke für die Erklärung!

Aber nochmal zu Robert´s Code.
Ich hab den heut mal ausprobiert - der hat nen kleinen Nachteil.
Der gibt nur Vorwahl aus.

Robert_G 7. Jul 2005 10:10

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

Zitat von Helmi
Danke für die Erklärung!

Aber nochmal zu Robert´s Code.
Ich hab den heut mal ausprobiert - der hat nen kleinen Nachteil.
Der gibt nur Vorwahl aus.

Jupp hatte ich auch schon gesehen.
Zu schnell irgendwas runtergetippt... (Wäre ja auch langweilig wenn geposteter Code einfach so funktioniert... :mrgreen: )

Helmi 24. Jan 2007 20:28

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

ich möchte an meinen alten Thread anknüpfen, da meine jetzige Frage im Grunde auch was damit zu tun hat. Folgendes:

Ich muss Chars gegen Chars im Hex-Format austauschen.
Soweit so gut.

Meine erste Version schaut so aus:
Delphi-Quellcode:
  Text := StringReplace(Text, 'ü', Chr($81), [rfReplaceAll]);
  Text := StringReplace(Text, 'ä', Chr($84), [rfReplaceAll]);
  Text := StringReplace(Text, 'ö', Chr($94), [rfReplaceAll]);
  Text := StringReplace(Text, 'Ü', Chr($9A), [rfReplaceAll]);
  Text := StringReplace(Text, 'Ä', Chr($8E), [rfReplaceAll]);
  Text := StringReplace(Text, 'Ö', Chr($99), [rfReplaceAll]);
  Text := StringReplace(Text, 'ß', Chr($E1), [rfReplaceAll]);
  Text := StringReplace(Text, '²', Chr($FD), [rfReplaceAll]);
  Text := StringReplace(Text, '³', Chr($FE), [rfReplaceAll]);
  Text := StringReplace(Text, 'µ', Chr($E6), [rfReplaceAll]);

  Serial.TransmittText(Text);
Wie man sieht, wird dort 10x StringReplace aufgerufen, um jeweils ein Char gegen ein Char aus Hex-Werten zu ersetzen.
Funktioniert auch - nur da StringReplace langsam ist, dacht ich mir ich könnt es anders machen. Dafür hab ich mir diesen Code ausgedacht:
Delphi-Quellcode:
const
  Chars: array[1..10] of Char = ('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß', '²', '³', 'µ');
  Bytes: array[1..10] of Byte = ($84, $94, $81, $8E, $99, $9A, $E1, $FD, $FE, $E6);

var
  i: Integer;
  j: Integer;
  S_Text: String;
  C_Char: Char;

begin
  SetLength(S_Text, length(Text));

  S_Text := '';

  for i := 1 to length(Text) do
    begin
      C_Char := Text[i];

      for j := Low(Chars) to High(Chars) do
        If Chars[j] = C_Char then
          begin
            C_Char := Chr(Bytes[j]);
            break;
          end;

      S_Text := S_Text + C_Char;
    end;

  Serial.TransmittText(S_Text);
Ich vermute mal, dass dieser Code schneller ist als 10x StringReplace.
Was vermutet ihr?

Auch wenn´s etwas OT ist, bringt diese Zeile überhaupt was :?:
Delphi-Quellcode:
  SetLength(S_Text, length(Text));

Matze 24. Jan 2007 20:38

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

Zitat von Helmi
Ich vermute mal, dass dieser Code schneller ist als 10x StringReplace.
Was vermutet ihr?

Lass beides doch einfach 1 Millionen mal aufrufen und miss die Zeit mit GetTickCount, dann weißt du sicher, was schneller ist, ohne hier ewig spekulieren zu müssen. ;) Wobei ich stark annehme, das deine Funktion um einiges schneller sein wird, aber teste es selbst.

MrKnogge 24. Jan 2007 20:38

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

Zitat von Helmi
Ich vermute mal, dass dieser Code schneller ist als 10x StringReplace.
Was vermutet ihr?

Teste es doch einfach :wink:
Zum zeitmessen einfach mal nach GetTickCount suchen.

Gruß

Hawkeye219 24. Jan 2007 21:17

Re: Was ist schneller? function oder 3x stringreplace?
 
Hallo Helmi,

schaue dir einmal die Funktion Translate an.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 2 von 3     12 3      

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