Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#21

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

  Alt 24. Jan 2007, 22:19
Moin Helmi,

zu dem hier

Delphi-Quellcode:
  SetLength(S_Text, length(Text));
  S_Text := '';
fällt mir leider nur ein Wort ein: Sinnbefreit
Ist nicht böse gemeint, denn schliesslich kann man nicht alles wissen.

Durch das SetLength sorgst Du dafür, dass S_Text soviele Zeichen aufnehmen kann, wie Text lang ist, und mit S_Text := '' bringst Du die Länge wieder auf 0.
So wie Du es geschrieben hast (immer das jeweilige Zeichen zum Ergebnisstring addieren) könntest Du SetLength also weglassen...
ABER:
Da Quell- und Zielstring auch nach dem Ersetzen der Zeichen gleich lang sind, solltest Du besser auf das S_Text := '' verzichten, und die Ersetzung anders lösen (auch wenn Deine Lösung wohl schon merklich schneller sein dürfte als die Variante mit StringReplace), Du kannst nämlich einfach die Zeichen, die unverändert bleiben sollen direkt an den Index im Zielstring schreiben, aus dem Du sie aus dem Quellstring gelesen hast.
Ausserdem ist es ungünstig jedesmal in einer Schleife den gesamten String der zu ersetzenden Zeichen durchzugehen, vermutlich wäre hier sogar die Verwendung von Pos schneller. Ich würde es allerdings mit Case lösen:

Delphi-Quellcode:
var
  i: Integer;
  S_Text: String;

begin
  SetLength(S_Text, length(Text));
  for i := 1 to length(Text) do begin
    case Text[i] of
      'ä' : S_Text[i] := chr($84);
      'ö' : S_Text[i] := chr($94);
      //... usw. bis 'µ', dann
      else S_Text[i] := Text[i];
    end;
  end;
  Serial.TransmittText(S_Text);
end;
Über die Reihenfolge musst Du Dir keine Gedanken machen, dass sortiert der Compiler schon so, dass die Case-Anweisung möglichst schnell durchlaufen wird.

Mit ein wenig mehr Aufwand könnte man das Ganze auch für Ersetzungen umbauen, die nicht 1:1 sind.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat