用TStringList的CommaText属性解析CSV文件非常的方便,可是如果字符串中有空格,会被像逗号一样转成新行。比如:
Your Company Name,Test
上面的字符应该被解析成两行,但CommaText默认会解析成:
Your
Company
Name
Test
上网查了一下,有人说可以替换空格为特殊字符,解析完再替换回来,还有的说是VCL代码有问题,要修改TStringlist的源代码。仔细想想,真的要这么麻烦吗?其实TStringList有一个属性设置下就好了
StrictDelimiter := True;
帮助上是这么说的:
Determines how the Delimiter property is used.
Use this property to specify whether the Delimiter is the only value used within the DelimitedText property. If set to True, individual strings in DelimitedText are separated only by the character that is the value of Delimiter. If set to False, individual strings in DelimitedText can be separated by a space, a non-printable character, or the character that is the value of Delimiter.
注意,这个新属性是D2006版本中才引入的,严格说来并不是bug,因为CSV文件并没有工业标准,只能常用的实践为依据
使用TStringList的CommaText属性解析CSV文件时,遇到字符串中的空格会被错误地转换为新行。通过设置StrictDelimiter属性为True,可以确保只以逗号作为分隔符,避免因空格导致的解析错误。此解决方案适用于Delphi 2006及以上版本,因为StrictDelimiter属性在D2006中引入。
2827

被折叠的 条评论
为什么被折叠?



