我在 TStringList 类中的分隔符方面遇到问题。看看:
var
s: string;
sl: TStringList;
begin
sl := TStringList.Create;
s := 'Users^foo bar^bar foo^foobar^barfoo';
sl.Delimiter := '^';
sl.DelimitedText := s;
ShowMessage(sl[1]);
end;
sl[1]
应返回'foo bar'
sl[1]
确实返回 'foo'
现在的分隔符似乎是 '^'
AND ' '
有什么想法吗?
最佳答案
您应该设置 s1.StrictDelimiter := True
以使空格不被视为分隔符,更多信息 here .
由于您使用的版本不支持上述内容(正如提交答案后所澄清的那样),因此您有两个选择:
- 找到一个您知道在原始文本中不会使用的字符(例如下划线),在拆分之前将所有空格转换为该字符,并在拆分后转换回来。这是robosoft的建议。
- 如果文本中没有引号和空格,可以使用 Alexander的技巧,并将文本换行在反向命令的分隔符之间,以便
'hello hello^bye bye'
变成'"hello hello"^"bye bye"'
。如果您确实选择了这条路径并且它适合您,请接受 Alexander 的答案而不是我的答案,他还提供了实现它的代码。
两种不使用 StrictDelimiter
的解决方法都有局限性:第一个需要一些未使用的字符,第二个不需要原始文本中的引号和空格。
也许是时候升级到较新版本的 Delphi 了:)
关于Delphi:即使设置了 Delimiter,TStringList Delimiter 也始终是空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335027/