我想生成一个包含数字的csv文件,我希望Excel自动读取该文件。
但是,Excel使用不同的csv格式,具体取决于区域设置。例如:
英文:
西班牙语:
是否可以在C ++中自动检测这些设置,以便根据它们生成文件?
我知道我可以使用语言环境对象获取小数点分隔符,但我不知道如何获取文本分隔符。
这个问题与以下内容有关: CSV is actually … Semicolon Separated Values 。但是,我不想读取文件,而是生成它,我想自动检测设置。
答案 0 :(得分:4)
我认为标准C ++没有“文本分隔符”的概念,而且这是特定于Windows的。因此,您可以将GetLocaleInfo与LOCALE_SLIST标志一起使用。
答案 1 :(得分:0)
你可以,但不是100%确定(但非常接近它)。检测文本分隔符可以通过分析文件(或体面样本)并确定每个记录中每个字符的频率来完成。每个记录的文本分隔符应该相同(或几乎相同)。它的频率将比每条记录中的字段数少一个。
一个好的分析器不会计算受双引号保护的字符,因为它们是嵌入的而不是分隔符(即,不计算“Boston,MA 02066”中的逗号,因为它受双引号保护)
在确定文本分隔符后,可以确定小数分隔符。只需查找相邻的数字,看看它们之间的区别(这不是之前确定的文本分隔符)。
答案 2 :(得分:0)
使用CultureInfo.TextInfo.ListSeparator。