Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
Delphi 10.4 Sydney
|
Re: TStringList und DelimitedText
19. Mai 2009, 10:37
Guten Morgen,
ich habe das explode mal etwas umgebaut so
das jetzt eine StringList zurückgegeben wird.
Delphi-Quellcode:
// Explode trennt S in die durch Separator getrennten Elemente auf. Wenn Limit
// > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element
// die Restzeichenkette steht.
function Explode(const Separator, S: string; Limit: Integer = 0): TStringList;
var
SepLen: Integer;
F, P: PChar;
Index: Integer;
begin
result := TStringList.Create;
if (S = '') or (Limit < 0) then Exit;
if Separator = '' then
begin
Result.add(S);
Exit;
end;
SepLen := Length(Separator);
Index := 0;
P := PChar(S);
while P^ <> #0 do
begin
F := P;
P := AnsiStrPos(P, PChar(Separator));
if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then
P := StrEnd(F);
result.Add(copy(AnsiString(F),0,P-F));
inc(index,1);
if P^ <> #0 then Inc(P, SepLen);
end;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
ts : TStringList;
ts2: TStringList;
s:String;
begin
ts := TStringList.Create;
s:='"Spalte 1"~"Spalte 2"~"Spalte 3"Test""';
try
ts.Delimiter := '~';
ts.DelimitedText := '"Spalte 1"~"Spalte 2"~"Spalte 3"';
showMessage(IntToStr(ts.Count)); {Ergibt 3, wie erwartet}
ts.DelimitedText := s;
showMessage(IntToStr(ts.Count)); {Ergibt 4, sollte aber 3 ergeben}
ts2:=explode('~',s));
showMessage(IntToStr(ts2.Count)); // Ergibt 3, SubStrings sind aber noch in "" eingefasst
ts2.free;
finally
ts.Free;
end;
end;
Grüße
Klaus
[Korrektur vorgenommen]
Klaus
|
|
Zitat
|