Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: TStringList und DelimitedText

  Alt 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
  Mit Zitat antworten Zitat