检测 CSV 分隔符是";"还是","

Detect if the CSV separator is ";" or ","

本文关键字:还是 CSV 分隔符 检测      更新时间:2023-10-16

根据区域设置,CSV分隔符(或列表分隔符)可能是;而不是,,这至少在Windows上取决于区域设置。

是否有一个跨平台的方法来检测什么CSV分隔符是与Qt?

如果没有跨平台的方法,是否有windows专用的方法?

QLocale::groupSeparator():

QChar separator = QLocale().groupSeparator();
编辑:

但这不是一个正确的答案。分组分隔符是用于分组之间的长数字的字符,例如:"1,234.56"。在该示例中,组分隔符为逗号,小数点分隔符为句号。

QLocale似乎根本不包含列表分隔符。您可以尝试根据使用的小数分隔符进行猜测。如果小数分隔符为.,则使用,作为CSV分隔符,如果小数分隔符为,,则使用;作为CSV分隔符。但我不知道这是否涵盖了所有语言

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

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

在Qt 5.15中,有一个函数QLocale::createSeparatedList,您可以使用它来创建一个分隔列表或检测分隔符(通过创建一个虚拟列表并检测已使用的分隔符)

示例(来自下面的注释)

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