-1

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

4

1 回答 1

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,则空格字符也被解释为分隔符,无论 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;
于 2013-06-10T15:49:25.940 回答