Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: String dynamisch erstellen???

  Alt 3. Mär 2010, 07:59
Sei X dein String, der zu füllen ist.
Delphi-Quellcode:
Var
  CurrentCharCountInX : Integer;

Procedure InitializeX;
Begin
  SetLength (X, 1024);
  CurrentCharCountInX := 0
End;

Procedure EnsureProperLengthOfX (LengthOfStringToAdd : Integer);
Begin
  If CurrentCharCountInX + LengthOfStringToAdd > Length (X) Then
    SetLength (X, 2 * Length(X));
End;

Procedure AppendStringToX (Const aString : String);
Var
  LengthOfString : Integer;

Begin
  LengthOfString := Length(aString);
  EnsureProperLengthOfX (LengthOfString);
  Move (aString[1], X[CurrentCharCountInX + 1], LengthOfString);
  Inc (CurrentCharCountInX , LengthOfString);
End;

Procedure FinalizeX;
Begin
  SetLength (X, CurrentCharCountInX);
End;

// TODO: Gib X einen besseren Namen

(*
Aufruf:

InitializeX;
AppendStringToX (Str1);
...
AppendStringToX (StrN);
FinalizeX;
*)
Wesentlich besser sollte es, denke ich, nicht gehen. Vielleicht bringt das auch überhaupt nichts.
Natürlich kann/sollte man die generische Move-Routine durch einen Gewinner der FastCode-Challenge ersetzen. Auch ein 'Inline' sollte noch etwas bringen.

Aber im Wesen dürfte das nahe am Optimum sein. Aber wie Astat schon treffend anmerkte, braucht das im normalen Leben kein Schwein. Vor allen Dingen nicht, wenn der String anschließend als SQL-Befehl an einen SQL-Server geschickt wird. Ich vermute in diesem Fall den Performancebottleneck nämlich nicht beim Konkatenieren...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat