用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文件并没有工业标准,只能常用的实践为依据