解析/拆分字符串不会返回所有部分

时间:2013-06-10 15:46:32

标签: arrays string delphi

我有一个程序,我从另一个问题中发现,当提供一个字符串,一个分隔符和一个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 ------------->。我使用该代码的方式有什么问题吗?如果没有明确地完成,我可以修改也不会被空格分割?

1 个答案:

答案 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;

这是documented behavior

  

如果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;