Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.449 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: String auf Tabulatoren prüfen

  Alt 18. Aug 2014, 16:30
Zitat:
Delphi-Quellcode:
       Value := Value + c
     else
       Caption:=Caption + c;
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).

Selbst eine TStringList erzeugen (jedes Mal und nichtmal über ein globales Singleton) und verwenden, erzeugt weniger Speicheroperationen (Get/Free/Realloc), als das da, mit der For-Schleife.
Gerade in Delphi 7 (ohne FastMM) ist dieses Einzelzeichenstringzusammensetzzeugs die totale Bremse. (zum Glück haben wir seit 2006 standardmäßig ein eigebautes InPlaceRealloc vom Pierre drin, welches solchen Code getwas verbessert, solange die Codeoptimierung aus dem Caption:=Caption+c ein Insert(Caption,C,1) hinbekommt).



Delphi-Quellcode:
(*procedure TTreeNodeDescriptor.FromString(Value: string);
var
  i: Integer;
begin
  i := Pos(':', Value);
  Caption := Trim(Copy(Value, 1, i - 1));
  Value := Trim(Copy(Value, i + 1));
  Level := Length(Value) - Length(TrimLeft(Value));
end;*)


procedure TTreeNodeDescriptor.FromString(Value: string);
var
  i: Integer;
  S: string;
begin
  i := Pos(':', Value);
  S := LeftStr(Value, i - 1);
  Caption := TrimLeft(S);
  Value := TrimLeft(Copy(Value, i + 1));
  Level := Length(S) - Length(Caption);
end;
Gut, man kann das jetzt noch extrem optimieren, indem man die Trims selber berechnet und bei den Copy sofort anwendet, bzw. zum Ausrechnen des Level heranzieht, ohne die String-Zwischenvariable, aber man kann es damit (im Normalfall) auch übertreiben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (18. Aug 2014 um 16:39 Uhr)
  Mit Zitat antworten Zitat