Einzelnen Beitrag anzeigen

Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Problem mit procedure Split()

  Alt 28. Apr 2011, 04:13
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:
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;
HTH
  Mit Zitat antworten Zitat