ika*_*eat -1 arrays delphi string
我有一个程序,我从另一个问题中发现,当提供一个字符串,一个分隔符和一个TStrings列表时,它应该拆分/分隔一个字符串.该程序是:
procedure SplitString(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
//Delimits or splits the received string, returns TStrings array
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.DelimitedText := Input;
end;
Run Code Online (Sandbox Code Playgroud)
但是当我提供它时:
SplitString('=',test,EqualParse);
Run Code Online (Sandbox Code Playgroud)
哪里test是一个字符串200 : NCPATH -------------> = C:\SNDATA\NC\,并EqualParse是TStringList,所有我得到的回复是200针对EqualParse[0](这应该是一切等号的左边.我期待着回来200 : NCPATH ------------->.难道有什么错我如何使用代码?我可以修改如果不明确地做,也不会被空格分割?
您需要设置TStrings.StrictDelimiter为True,否则DelimitedText包括空格作为分隔符.
procedure SplitString(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
//Delimits or splits the received string, returns TStrings array
Assert(Assigned(Strings)) ;
Strings.Clear;
Strings.Delimiter := Delimiter;
Strings.StrictDelimiter := True; // <-- add this
Strings.DelimitedText := Input;
end;
Run Code Online (Sandbox Code Playgroud)
这是记录在案的行为:
如果StrictDelimiter设置为False,则无论Delimiter的值如何,空格字符也会被解释为分隔符.
话虽如此,设置输入的分隔符属性TStrings可能会对调用者产生不必要的副作用,因此我建议使用本地TStringList进行解析:
procedure SplitString(const Delimiter: Char; Input: string; const Strings: TStrings);
var
Tmp: TStringList;
begin
Assert(Assigned(Strings)) ;
tmp := TStringList.Create;
try
tmp.Delimiter := Delimiter;
tmp.StrictDelimiter := True;
tmp.DelimitedText := Input;
Strings.Assign(tmp);
finally
tmp.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)