Wieso mit einem Einrad (Einzelzeichenstringmanipulationsoperationen) einen Käfer (Delphi mit TStringList) versuchen zu verfolgen?
Gut, man kann auch einen Ferrari nehmen (Position suchen und alles zusammen machen).
Das ist nicht schneller. Zum suchen musst Du eh bis zum ':' laufen. Und danach kopieren. Bei den kleinen Strings macht das keinen Unterschied. Und deine Argumente bezüglich Speicher ziehen seit FastMem auch nicht mehr. Probiere es mal aus.
Hier mal dein Code kommentiert.
Delphi-Quellcode:
procedure TTreeNodeDescriptor.FromString(Value: string);
var
i: Integer;
S: string;
begin
i := Pos(':', Value); --- 1. mal laufen
S := LeftStr(Value, i - 1); --- 2. mal laufen und kopieren
Caption := TrimLeft(S); --- 3. mal laufen und kopieren
Value := TrimLeft(Copy(Value, i + 1)); --- 4. mal laufen und kopieren
Level := Length(S) - Length(Caption);
end;
Du rennst 5 mal durch den String bzw. setzt zu einer Schleife an. Wozu?
Also, ich meine, wir reden hier ziemlich abgehoben über Codeästhetik und ob man eher Makros (Trim,Copy,LeftStr,Pos) nimmt, oder alles per Hand macht.
Rein performancetechnisch würde ich annehmen, das ein einmaliges Durchlaufen am schnellsten ist.
Von der Lesbarkeit würde ich die Makro-Variante wohl vorziehen.