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
By Wiezutun
Teilen einer Zeichenfolge in eine String-Liste : Mehreren tausend Tipps, um Ihr Leben einfacher machen.