// Die folgende Prozedur erlaubt das Aufsplitten eines Strings an verschiedenen
// Trennzeichen. Die Methode ist noch schneller als die nichtdokumentierte
// Funktion "ExtractStrings".

// Getestet mit D4 unter XP
// Für höhere Versionen gelten die auskommentierten Zeilen

procedure SplitString(Gesamt: string; Trennung: TSysCharSet; Erg: TStrings); 
var 
  p, r: pchar; 
  s: string; 
begin 
  Erg.BeginUpdate; 
  p := pchar(Gesamt); 
  repeat 
    r := p; 
    while not(p^ in Trennung + [#0, #10, #13]) 
    // while not CharInSet(p^, Trennung + [#0, #10, #13]) 
      do 
      inc(p); 
    SetString(s, r, p - r); 
    if s <> '' then 
      Erg.add(s); 
    while p^ in Trennung + [#10, #13] 
    // while CharInSet(p^, Trennung + [#10, #13]) 
      do 
      inc(p); 
  until p^ = #0; 
  Erg.endupdate; 
end;
 
// --- Beispielaufruf ---- 
 
procedure TForm1.Button3Click(Sender: TObject); 
var 
  s: string; 
begin 
  Listbox1.items.clear; 
  s := 'Test1'#13#10'Test2#Test3§§§Test4'; 
  SplitString(s, ['#', '§'], Listbox1.items); 
end; 

Ergebnis:

Test1
Test2
Test3
Test4


// Und so kann man Beispielsweise Text aus Textboxen in einzelne Wörter zerlegen:

const 
  Delimiters = [#1..#47, #58..#64, #91..#96, #123..#191, #215, #216, #247, #248]; 
  Delimiters_0 = [#0] + Delimiters; 
 
procedure GetWords(txt: string; woerter: TStrings);
var 
  p, r: pchar; 
  Token: string; 
begin 
  woerter.Clear; 
  p := pchar(txt); 
  repeat 
    r := p; 
    while not (p^ in Delimiters_0) do inc(p); 
    SetString(Token, r, p - r); 
    if Token <> '' then woerter.Add(Token); 
    while p^ in Delimiters do inc(p); 
  until p^ = #0; 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Memo2.Scrollbars := ssBoth; 
  Memo3.Scrollbars := ssBoth; 
  Memo2.lines.loadfromfile('c:\protokoll.txt'); // z.B. 
  GetWords(Memo2.text, Memo3.lines); 
end; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke