![]() |
Delphi-Version: 5
Problem mit procedure Split()
Hallo
Ich hoffe ich bin hier richtig. Ich hab ein kleines problem mit der Funktion Split() was ist den hier falsch?, wieso bekomme ich das ganze nicht gesplittet?
Delphi-Quellcode:
program uragan;
var list: TStringList; s : string; i : integer; procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings); begin Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end; begin list := TStringList.create; s := 'blabla' + HStr('00') + 'blabla2' + HStr('00') + 'blabla3' + HStr('00') + 'blabla4' + HStr('00') + 'blabla5' + HStr('00') ; Split(HStr('00'), s, list); for i := 0 to list.count-1 do begin ShowMessage(list[i]); end; end. |
AW: Problem mit procedure Split()
Was kommt den raus?
|
AW: Problem mit procedure Split()
Guten Abend,
was macht denn HStr('00')? Ist es das gleiche wie #0? Warum sind Strings in der Paramterliste der Prozedur split als const deklariert? Grüße Klaus |
AW: Problem mit procedure Split()
changed..
gruss |
AW: Problem mit procedure Split()
Zitat:
array0 = blabla array1 = ?? ist frei, wahrscheinlich #0 mehr kommt nicht wenn ich Split string ändere, zb auf ","dann klappt es, es muss aber HStr('00')bzw #0 sein |
AW: Problem mit procedure Split()
Hallo,
es kommen nicht *zwei Arrays*, sondern zwei Einträge in einer TStringList. Einer gleicht 'blabla' und einer ist ein Leerstring. Mach einen Breakpoint auf Strings.DelimitedText := Input; und steppe mal mit F7 durch. Dann wird Dir klar, was passiert. Kurz gesagt: #0 geht halt nicht. Antwort1) der Delimiter darf bei dieser Vorgehensweise nicht #0 sein. Antwort2) eine TStringList für diesen Zweck zu verwenden ist super praktisch und super Performance fressend. Mir hat eine Funktion auf Stackoverflow ganz gut gefallen:
Delphi-Quellcode:
HTH
procedure TForm1.Button1Click(Sender: TObject);
const MYDELIMITER = #0; var s : string; sTok: string; i : integer; function GetTok(const Line: string; const Delim: Char; const TokenNum: Byte): string; { LK Nov 8, 2009 - Reoptimized using PChars instead of calls to Pos and PosEx } { See; http://stackoverflow.com/questions/1694001/is-there-a-fast-gettoken-routine-for-delphi } var I, CurToken: Integer; PLine, PStart: PChar; begin CurToken := 1; PLine := PChar(Line); PStart := PLine; for I := 1 to length(Line) do begin if PLine^ = Delim then begin if CurToken = TokenNum then break else begin CurToken := CurToken + 1; inc(PLine); PStart := PLine; end; end else inc(PLine); end; if CurToken = TokenNum then SetString(Result, PStart, PLine - PStart) else Result := ''; end; begin s := 'blabla' + MYDELIMITER + 'blabla2' + MYDELIMITER + 'blabla3' + MYDELIMITER + 'blabla4' + MYDELIMITER + 'blabla5' + MYDELIMITER ; i := 1; sTok := GetTok(s, MYDELIMITER, i); while ('' <> sTok) do begin ShowMessage(sTok); inc(i); sTok := GetTok(s, MYDELIMITER, i); end; end; |
AW: Problem mit procedure Split()
Deine Funktion kommt nur mit kurzen Strings klar und ist vom Aufwand O(n^2), weil für jedes Token immer von Anfang an gesucht wird. Ob das Schneller ist, bezweifle ich mal ganz stark.
Im Gegensatz dazu ist die TStringList-Geschichte sehr viel mächtiger, denn sie kommt mit allen Stringtypen und mit in Gänsefüschen eingeschlossenen Texten klar, z.B. wird
Delphi-Quellcode:
in drei Strings ("a", "b,c" und "d") aufgeteilt.
a,"b,c",d
Der Code von TStringlist sieht auch ganz schön flott aus. |
AW: Problem mit procedure Split()
..alternativ könntest Du auch mal diese
![]() ![]() Grüße Klaus |
AW: Problem mit procedure Split()
Wer eine Stringliste als Splitter nutzt, der sollte sich von #0 als Trenner verabschieden.
Alles, was intern PChar nutzt oder eine Kompatibilität zu diesem bietet, das kann nich genutzt werden. #0 = Textende also weiter macht die Stringliste auch nicht |
AW: Problem mit procedure Split()
Es scheint sich aber um eine C-Stringliste zu handeln. Dort wird m.W. #0 als Trenner verwendet
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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