Einzelnen Beitrag anzeigen

ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#11

AW: Split strings using string list

  Alt 12. Aug 2011, 17:51
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;
  Mit Zitat antworten Zitat