![]() |
String to Array (schnell)
Hi,
Welches ist die schnellste Methode einen großen String (aus der RichEdit) in ein String-Array zu bekommen? Habe vieles ausprobiert und die schnellste, aber auch umständlichste Methode, war die RichEdit in eine Textdatei zu speichern, die Datei zeilenweise (mit ReadLn) einzulesen und die Zeilen in das Array zu legen. Explode/Split ist viel zu langsam und das zeilenweise auslesen aus der RichEdit auch. Kennt jemand was schnelleres (weniger umständlicheres)? evtl. mit ASM oder so? Danke |
Re: String to Array (schnell)
Per .Text und StringReplace
|
Re: String to Array (schnell)
Zitat:
Thx |
Re: String to Array (schnell)
Es gibt ja die Möglichkeit den gesammten Inhalt einer Stringliste in einen String auslagern.
|
Re: String to Array (schnell)
Zitat:
|
Re: String to Array (schnell)
hi,
warum ist explode viel zu langsam? Wie hast du's denn implementiert? Ich benutze zum Zerlegen von z.B. großen CSV-Dateien auch explode (und das ist sicher die einfachste Variante, einen String zu zerlegen). Wenn du möchtest, kann ich dir gerne meine Implementierung geben. Gruß Michael [Edit]Auch Assembler nützt einem nix, wenn der verwendete Algorithmus nicht der beste ist. Ich habe auch irgendwo (möglicherweise hier in der Code-Library, bin mir nicht mehr sicher) mal so einen explode-Algo in Assembler gesehen. Trotzdem war meine Variante in reinem Delphi bei 7MB Daten ca. 10.000x schneller.[/Edit] |
Re: String to Array (schnell)
Zitat:
Ich habe sämtliche Implementierungen aus diesem und anderen Foren ausprobiert und sogar eine aus 100% Inline-ASM, aber die sind alle viel langsamer, als das abspeichern und auslesen aus einer Datei. Aber es wäre nett, wenn du mal deine Implementierung postest, vielleicht läuft die ja. :stupid: THX |
Re: String to Array (schnell)
Ok, falls du
![]() Meine ist je nach Delimiter 2-4x so langsam (laut Testtool). Aber wie versprochen, kannst du meine ja mal ausprobieren:
Delphi-Quellcode:
function follows(const s,n : string; pos1 : integer) : boolean;
var x : integer; begin for x := 0 to length(n)-1 do if n[x+1] <> s[pos1 + x] then begin result := false; exit; end; result := true; end; function explode(const n,s : string) : TStringDynArray; var temp : array of integer; Len : integer; x, count, laenge : integer; begin x := 1; SetLength(temp, 20); count := 1; temp[0] := 1; laenge := Length(s) - Length(n) + 1; while x <= laenge do begin if follows(s,n,x) then begin inc(x, length(n)); inc(count); if length(temp) < count then SetLength(temp, count + 20); temp[count-1] := x; continue; end; inc(x); end; SetLength(temp, count); SetLength(result, length(temp)); for x := 0 to High(temp)-1 do begin Len := temp[x+1]-temp[x]-length(n); result[x] := copy(s, temp[x], Len); end; Len := length(s)-temp[high(temp)]+1; result[high(temp)] := copy(s, temp[high(temp)], Len); end; |
Re: String to Array (schnell)
Vielen Dank MStoll, deine Funktion funktioniert sehr gut und auch relativ schnell. Hast mich gerettet. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 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 by Thomas Breitkreuz