检测CSV分隔符是否为“;“(分号)或“,”(逗号)

kmynzznz  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(137)

根据区域设置,CSV分隔符(或列表分隔符)可能是;而不是,,至少在Windows上,这取决于区域设置。
有没有一种跨平台的方法来检测Qt中的CSV分隔符是什么?
如果没有跨平台的方法,是否有特定于Windows的方法?

mwecs4sa

mwecs4sa1#

QLocale::groupSeparator()

QChar separator = QLocale().groupSeparator();

编辑:

但这不是一个正确的答案。组分隔符是在数字组之间的长数字中使用的字符,例如:“一千二百三十四点五六”。在该示例中,组分隔符是逗号,小数点分隔符是句点。
QLocale似乎根本不包含列表分隔符。您可以尝试根据使用的小数点分隔符进行猜测。如果十进制分隔符是.,则使用,作为CSV分隔符,如果十进制分隔符是,,则使用;作为CSV分隔符。但我不知道这是否涵盖所有语言。

xwmevbvl

xwmevbvl2#

对于Windows,您可以使用GetLocaleInfo API读取列表分隔符。

GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLIST, szBuf, sizeof(szBuf));
pdtvr36n

pdtvr36n3#

在Qt 5.15中,有一个函数QLocale::createSeparatedList,您可以使用它来创建一个分隔列表或检测分隔符(通过创建一个虚拟列表并检测使用了什么分隔符)。
示例(来自下面的评论)

QLocale l; 
qDebug() << l.createSeparatedList({"1","2","3"}).at(1);

相关问题