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

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\,并EqualParseTStringList,所有我得到的回复是200针对EqualParse[0](这应该是一切等号的左边.我期待着回来200 : NCPATH ------------->.难道有什么错我如何使用代码?我可以修改如果不明确地做,也不会被空格分割?

Rem*_*eau 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;
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)