![]() |
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. |
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