Delphi (2006): 如何按新行拆分并同时中断
Delphi (2006): how to Split by new line and break at the same time
我在 Java 中有这个简单的操作,其中字符串被换行和分隔符分割。
String i= "Holidays
Great.
Bye";
String []linesArray = i.split("\r?\n");
我想在 Delphi 2006 年获得相同的结果。
使用以下步骤有效吗?
charArray[0] := '\r';
charArray[1] := '\n';
strArray := strA.Split(charArray);
我这样解释你的请求:“在 CR 和 LF 处拆分一个字符串。”这意味着 CR+LF 给出了一个空字符串元素。例如,'alpha'#13'beta'#10'gamma'#13#10'delta'
产生五个元素 'alpha'
、'beta'
、'gamma'
、''
和 'delta'
。
如果是这样,如果你使用的是非古代版本Delphi,这就很简单了:
var S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
var Parts := S.Split([#13, #10]);
for var Part in Parts do
ShowMessage(Part);
旧 Delphi 版本
上面的代码需要 TStringHelper
(至关重要)并且还使用了内联变量声明、for in
循环和泛型。
对于旧的 Delphi 版本,您可以手动完成:
type
TStringArray = array of string;
function Split(const S: string): TStringArray;
var
Count: Integer;
const
Delta = 512;
procedure Add(const Part: string);
begin
if Length(Result) = Count then
SetLength(Result, Length(Result) + Delta);
Result[Count] := Part;
Inc(Count);
end;
var
p, i: Integer;
begin
Result := nil;
Count := 0;
p := 0; // previous delim
for i := 1 to Length(S) do
if S[i] in [#13, #10] then
begin
Add(Copy(S, Succ(p), i - p - 1));
p := i;
end;
Add(Copy(S, Succ(p)));
SetLength(Result, Count);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
S: string;
Parts: TStringArray;
i: Integer;
begin
S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
Parts := Split(S);
for i := 0 to High(Parts) do
ShowMessage(Parts[i]);
end;
我在 Java 中有这个简单的操作,其中字符串被换行和分隔符分割。
String i= "Holidays
Great.
Bye";
String []linesArray = i.split("\r?\n");
我想在 Delphi 2006 年获得相同的结果。
使用以下步骤有效吗?
charArray[0] := '\r';
charArray[1] := '\n';
strArray := strA.Split(charArray);
我这样解释你的请求:“在 CR 和 LF 处拆分一个字符串。”这意味着 CR+LF 给出了一个空字符串元素。例如,'alpha'#13'beta'#10'gamma'#13#10'delta'
产生五个元素 'alpha'
、'beta'
、'gamma'
、''
和 'delta'
。
如果是这样,如果你使用的是非古代版本Delphi,这就很简单了:
var S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
var Parts := S.Split([#13, #10]);
for var Part in Parts do
ShowMessage(Part);
旧 Delphi 版本
上面的代码需要 TStringHelper
(至关重要)并且还使用了内联变量声明、for in
循环和泛型。
对于旧的 Delphi 版本,您可以手动完成:
type
TStringArray = array of string;
function Split(const S: string): TStringArray;
var
Count: Integer;
const
Delta = 512;
procedure Add(const Part: string);
begin
if Length(Result) = Count then
SetLength(Result, Length(Result) + Delta);
Result[Count] := Part;
Inc(Count);
end;
var
p, i: Integer;
begin
Result := nil;
Count := 0;
p := 0; // previous delim
for i := 1 to Length(S) do
if S[i] in [#13, #10] then
begin
Add(Copy(S, Succ(p), i - p - 1));
p := i;
end;
Add(Copy(S, Succ(p)));
SetLength(Result, Count);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
S: string;
Parts: TStringArray;
i: Integer;
begin
S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
Parts := Split(S);
for i := 0 to High(Parts) do
ShowMessage(Parts[i]);
end;