Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: String auf Tabulatoren prüfen

  Alt 18. Aug 2014, 17: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.
$2B or not $2B

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