Delphi:即使设置了 Delimiter,TStringList Delimiter 也始终是空格字符

标签 delphi delphi-7 delimiter tstringlist

我在 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 .

由于您使用的版本不支持上述内容(正如提交答案后所澄清的那样),因此您有两个选择:

  1. 找到一个您知道在原始文本中不会使用的字符(例如下划线),在拆分之前将所有空格转换为该字符,并在拆分后转换回来。这是robosoft的建议。
  2. 如果文本中没有引号和空格,可以使用 Alexander的技巧,并将文本换行在反向命令的分隔符之间,以便 'hello hello^bye bye' 变成 '"hello hello"^"bye bye"'。如果您确实选择了这条路径并且它适合您,请接受 Alexander 的答案而不是我的答案,他还提供了实现它的代码。

两种不使用 StrictDelimiter 的解决方法都有局限性:第一个需要一些未使用的字符,第二个不需要原始文本中的引号和空格。

也许是时候升级到较新版本的 Delphi 了:)

关于Delphi:即使设置了 Delimiter,TStringList Delimiter 也始终是空格字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335027/

相关文章:

listview - TListView:已添加项目?

delphi - 拖动节点时 TTreeView 选择故障

c# - 替换文件路径中的分隔符

javascript - 带逗号分隔符的数字

linux - 如何在Delphi中实时读取cygwin程序的命令行输出?

multithreading - 终止线程,退出前运行代码

Delphi 7 -> 无法从资源文件加载图像

delphi - 为什么 UrlDownloadToFile::OnProgress 总是返回具有相同值的 ulProgress 和 ulProgressMax

delphi - 从另一个表单访问 DBGrid1.Columns[1].Title.Caption

c++ - C++ 中的 strtok() 模拟