Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Split strings using string list (https://www.delphipraxis.net/162202-split-strings-using-string-list.html)

ASM 12. Aug 2011 18:51

AW: Split strings using string list
 
Hier mal eine Alternative ohne Verwendung von Stringlists, universell (für alle möglichen Separatoren) verwendbar und unabhängig von der Delphi-Version:
Code:
function TokenCount(const s: Ansistring; Separator: Char): Integer;
var
  i: Integer;
begin
  Result := 0;
  if s = '' then exit;
  i := 1;
  while (i <= Length(s)) do
  begin
    if (s[i] = Separator) then Inc(Result);
    Inc(i);
  end;
end;

function GetToken(const s: Ansistring; Separator: Char; TokenAtPos: Integer): Ansistring;
var
  j, i: Integer;
begin
  Result := '';
  if s='' then exit;
  j := 1; // Counter für aktuelle Zeichenposition in s
  i := 0; // Counter für Anzahl der in s vorhandenen Separatoren
  while (i <= TokenAtPos) and (j <= Length(s)) do
  begin
    if s[j] = Separator then Inc(i)
    else
      if i = TokenAtPos then Result := Result + s[j];
    Inc(j);
  end;
end;


// Beispiel:
// (die hier verwendete Variable "Barcode" ist natürlich kein echter Barcode)

var
  // beachte die Existenz einfacher Leerzeichen bei "3 45" und "IJ K"
  Barcode: Ansistring = '012'#9'3'#32'45'#9'678'#9'9AB'#9'CDE'#9'FGH'#9'IJ'#32#32'K'#9'LMN';

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  n: integer;
begin
  memo1.lines.Add(format('kompletter String: "%s"',[barcode]));
  n := TokenCount(barcode, #9);
  // Anzeige nur zwecks Kontrolle:
  memo1.lines.add(format('Anzahl Tabs: %d / Anzahl Token: %d', [n,n+1]));
  // Ausgabe der einzelnen Token des Barcodes:
  for i := 0 to n do
    with memo1.lines do
      add(format('Barcode Substring %d = %s',[i,GetToken(Barcode, #9, i)]));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz