![]() |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Ich habe es jetzt mal mit TStringList getestet wird aber noch langsamer :(
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; slNew: TSringList; begin slNew := TStringList.Create; for i:= 0 to ListBox1.Items.Count -1 do begin slNew.Text := slNew.Text + ListBox1.Items.Strings[i]; If i mod 100 = 0 Then ProgressBar1.StepBy(100); // aktuelle Position end; // schleife ende |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Hallo Doris,
Zitat:
Wohin sollen sie übergeben werden? Grüße vom marabu |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Hallo Marabu
Aus wieviel Zeichen jede Zeile besteht oder wie lang sie ist kann ich nicht sagen ändert sich ja auch Zeile für Zeile. Übergeben wird es an einer Variablen von Typ String (sNew). Am besten du schaust dir das Beispiel von Daniel Schuhmann an so in etwa sieht das dann aus. |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Problem
Delphi-Quellcode:
Viel Schneller ist:
// es wird 20000 Mal an sNew angehängt
// bei jedem Anhängen muss ein neuer speicherblock allokiert werden // und der gesamte bisherige String kopiert werden !!! sNew := sNew + '' + Listbox1.Items.Strings[i];
Delphi-Quellcode:
function CopyThatList(liste:TStrings; const delimstring:string):string;
var i, L, dl : Integer; size : integer; P : PChar; s : string; begin dl := Length(delimstring); size := 0; for i := 0 to liste.Count - 1 do Inc(size, Length(liste[I]) + dl); SetLength(result, size); // Speicher nur einmal reservieren !! p := PChar(Result); for i := 0 to liste.Count - 1 do begin s := liste[i]; L := Length(s); if L <> 0 then begin System.Move(Pointer(S)^, P^, L); Inc(P, L); end; if dl <> 0 then begin System.Move(delimstring[1], P^, dl); Inc(P, dl); end; end; end; |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Hallo,
Zitat:
Delphi-Quellcode:
muss jedesmal den String aus der Stringliste zusammensetzen, den neuen String addieren und dann das Ergebnis wieder aufteilen. Das ist so ziemlich das Langsamste, was man machen kann.
slNew.Text := slNew.Text + ListBox1.Items.Strings[i];
Gruß xaromz |
Re: Stringübergabe dauert sehr lange wer kann helfen ?
Geht auch so:
Delphi-Quellcode:
Aber performant geht anders...
function ItemsToStr(s: TStrings): string;
var i: integer; begin Result := s.CommaText; for i := 1 to Length(Result) do if Result[i] = ',' then Result[i] := ' '; end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz