将TStringList转换为带分隔符的字符串

17

我有一个字符串列表存储在TStringList中,我想把它转换成用逗号分隔的字符串,我使用以下代码:

channelList: TStringList;
aCurrentChannel :=  Stringreplace(channelList.Text,Char(13)+Char(10),',',[rfReplaceAll]);

但是最后一个字符出现了 , ,比如 1,2,有没有什么方法可以避免这种情况?


6
TStringList有一个CommaText属性。 - James Barrass
正如JamesB所写,有CommaText属性,但使用Trim()应该可以修复您的原始解决方案,即StringReplace(Trim(sl.Text), ...) - ain
@JamesB,CommaText使用“QuoteChar”作为引号将项目括起来,也许这不是OP想要的。 - whosrdaddy
@whosrdaddy,QuoteChar仅在需要时使用(即在字符串中找到空格或引号时)。尽管如此,DelimitedText在引号方面的作用方式相同。CommaText仅使用固定字符作为分隔符和引号字符。 - Uwe Raabe
@UweRaabe,确实它只引用带有空格和引号的字符串,但也许这并不是所期望的。 - whosrdaddy
3个回答

25
您需要使用TStringList类的DelimitedText属性。根据在线帮助:

使用DelimitedText将TStrings对象中的所有字符串作为单个字符串获取或设置,这些字符串由Delimiter属性指定的字符分隔。


19

使用DelimitedText属性:

channelList.Delimiter := ',';
channelList.QuoteChar := ''; // or
channelList.QuoteChar := #0; // for higher delphi versions
aCurrentChannel := channelList.DelimitedText;

channelList.QuoteChar := ''; 不再起作用了,而 channelList.QuoteChar := #0; - 它正在工作。 - Roman Marusyk
我正在使用XE7,遇到了一个错误:E2010 不兼容的类型:'Char' 和 'string'。但是在Delphi 6中,我总是使用QuoteChar:= ''; 这取决于Unicode吗? - Roman Marusyk
似乎在Delphi 11中,Char类型不允许'',而需要#0。我认为这很反直觉,将在http://quality.embarcadero.com上提交报告。 - George Birbilis

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接