Teilen einer Zeichenfolge in eine String-Liste


Eine Funktion, die eine Zeichenfolge in Teilen getrennt durch eine Teilzeichenfolge unterteilt
und gibt die Teile in ein dynamisches String-array
Teilen einer Zeichenfolge in eine String-Liste
Die folgenden Funktionen zerlegt einen String in Teile getrennt durch eine Teilzeichenfolge und die Teile in eine String-Liste, die als dritten Parameter übergeben werden oder erstellt durch die Funktion (und in diesem Fall, den sie vom Aufrufer freigegeben werden muss) zurück:
interface
  uses classes;
  function SplitStrings(const str: string;
                        const separator: string = ',';
                        Strings: TStrings = nil): TStrings;
  function AnsiSplitStrings(const str: string;
                            const separator: string = ',';
                            Strings: TStrings = nil): TStrings;
  implementation
  uses sysutils;
  function SplitStrings(const str: string; const separator: string;
                        Strings: TStrings): TStrings;
  // Fills a string list with the parts of 'str' separated by
  // 'separator'. If Nil is passed instead of a string list,
  // the function creates a TStringList object which has to
  // be freed by the caller
  var
    n: integer;
    p, q, s: PChar;
    item: string;
  begin
    if Strings = nil then
      Result := TStringList.Create
    else
      Result := Strings;
    try
      p := PChar(str);
      s := PChar(separator);
      n := Length(separator);
      repeat
        q := StrPos(p, s);
        if q = nil then q := StrScan(p, #0);
        SetString(item, p, q - p);
        Result.Add(item);
        p := q + n;
      until q^ = #0;
    except

      item := '';
      if Strings = nil then Result.Free;
      raise;
    end;
  end;
  function AnsiSplitStrings(const str: string; const separator: string;
                            Strings: TStrings): TStrings;
  // Fills a string list with the parts of 'str' separated by
  // 'separator'. If Nil is passed instead of a string list,
  // the function creates a TStringList object which has to
  // be freed by the caller
  // ANSI version
  var
    n: integer;
    p, q, s: PChar;
    item: string;
  begin
    if Strings = nil then
      Result := TStringList.Create
    else
      Result := Strings;
    try
      p := PChar(str);
      s := PChar(separator);
      n := Length(separator);
      repeat
        q := AnsiStrPos(p, s);
        if q = nil then q := AnsiStrScan(p, #0);
        SetString(item, p, q - p);
        Result.Add(item);
        p := q + n;
      until q^ = #0;
    except
      item := '';
      if Strings = nil then Result.Free;
      raise;
    end;
  end;

Beispiele:
procedure TForm1.Button1Click(Sender: TObject);
  begin
    SplitStrings(Edit1.Text, ', ', ListBox1.Items);
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  var
    Parts: TStrings;
  begin
    Parts := nil;
    try
      Parts := SplitStrings(Edit1.Text, ', ');
      ShowMessage('First part is '' + Parts[0] + ''');
    finally
      Parts.Free;
    end;
  end;

Sie sehen ein Beispiel mit einem dynamischen Array anstatt eine StringList in einem separaten Artikel.









Teilen einer Zeichenfolge in eine String-Liste


Teilen einer Zeichenfolge in eine String-Liste : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Eine Funktion, die eine Zeichenfolge in Teilen getrennt durch eine Teilzeichenfolge unterteilt
und gibt die Teile in ein dynamisches String-array
Teilen einer Zeichenfolge in eine String-Liste
Die folgenden Funktionen zerlegt einen String in Teile getrennt durch eine Teilzeichenfolge und die Teile in eine String-Liste, die als dritten Parameter übergeben werden oder erstellt durch die Funktion (und in diesem Fall, den sie vom Aufrufer freigegeben werden muss) zurück:
interface
  uses classes;
  function SplitStrings(const str: string;
                        const separator: string = ',';
                        Strings: TStrings = nil): TStrings;
  function AnsiSplitStrings(const str: string;
                            const separator: string = ',';
                            Strings: TStrings = nil): TStrings;
  implementation
  uses sysutils;
  function SplitStrings(const str: string; const separator: string;
                        Strings: TStrings): TStrings;
  // Fills a string list with the parts of 'str' separated by
  // 'separator'. If Nil is passed instead of a string list,
  // the function creates a TStringList object which has to
  // be freed by the caller
  var
    n: integer;
    p, q, s: PChar;
    item: string;
  begin
    if Strings = nil then
      Result := TStringList.Create
    else
      Result := Strings;
    try
      p := PChar(str);
      s := PChar(separator);
      n := Length(separator);
      repeat
        q := StrPos(p, s);
        if q = nil then q := StrScan(p, #0);
        SetString(item, p, q - p);
        Result.Add(item);
        p := q + n;
      until q^ = #0;
    except

      item := '';
      if Strings = nil then Result.Free;
      raise;
    end;
  end;
  function AnsiSplitStrings(const str: string; const separator: string;
                            Strings: TStrings): TStrings;
  // Fills a string list with the parts of 'str' separated by
  // 'separator'. If Nil is passed instead of a string list,
  // the function creates a TStringList object which has to
  // be freed by the caller
  // ANSI version
  var
    n: integer;
    p, q, s: PChar;
    item: string;
  begin
    if Strings = nil then
      Result := TStringList.Create
    else
      Result := Strings;
    try
      p := PChar(str);
      s := PChar(separator);
      n := Length(separator);
      repeat
        q := AnsiStrPos(p, s);
        if q = nil then q := AnsiStrScan(p, #0);
        SetString(item, p, q - p);
        Result.Add(item);
        p := q + n;
      until q^ = #0;
    except
      item := '';
      if Strings = nil then Result.Free;
      raise;
    end;
  end;

Beispiele:
procedure TForm1.Button1Click(Sender: TObject);
  begin
    SplitStrings(Edit1.Text, ', ', ListBox1.Items);
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  var
    Parts: TStrings;
  begin
    Parts := nil;
    try
      Parts := SplitStrings(Edit1.Text, ', ');
      ShowMessage('First part is '' + Parts[0] + ''');
    finally
      Parts.Free;
    end;
  end;

Sie sehen ein Beispiel mit einem dynamischen Array anstatt eine StringList in einem separaten Artikel.


Teilen einer Zeichenfolge in eine String-Liste

Teilen einer Zeichenfolge in eine String-Liste : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Teilen einer Zeichenfolge in eine String-Liste
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung