我有一个程序,我从另一个问题中发现,当提供一个字符串,一个分隔符和一个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;
然而,当我提供它时:
SplitString('=',test,EqualParse);
test
是一个字符串200 : NCPATH -------------> = C:\SNDATA\NC\
而EqualParse
是一个TStringList
,我得到的所有内容都是200
EqualParse[0]
应该是等号左边的所有内容。我希望能回来200 : NCPATH ------------->
。我使用该代码的方式有什么问题吗?如果没有明确地完成,我可以修改也不会被空格分割?
答案 0 :(得分:5)
您需要将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;
如果StrictDelimiter设置为False,则无论分隔符的值如何,空格字符也会被解释为分隔符。
话虽如此,设置输入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;