Автоматически создать файл CSV локали для Excel в C ++ - PullRequest
2 голосов
/ 14 июля 2010

Я хочу создать CSV-файл, содержащий числа, и хочу, чтобы Excel автоматически прочитал этот файл.

Однако в Excel используется другой формат CSV в зависимости от настроек локали. Например:

английский

  • Разделитель текста:,
  • Десятичный разделитель:.

Испанский:

  • Разделитель текста:;
  • Десятичный разделитель:,

Можно ли автоматически определить эти настройки в C ++, чтобы я мог сгенерировать файл в соответствии с ними?

Я знаю, что могу получить десятичный разделитель, используя объект локали, но я не знаю, как получить разделитель текста.

Этот вопрос связан с: CSV на самом деле ... Значения, разделенные точкой с запятой . Однако я не хочу читать файл, а просто сгенерировать его и хочу автоматически определить настройки.

Ответы [ 3 ]

4 голосов
/ 14 июля 2010

Я не думаю, что в стандартном C ++ есть понятие «разделитель текста», и что это зависит от Windows.Таким образом, вы можете использовать GetLocaleInfo с флагом LOCALE_SLIST.

0 голосов
/ 14 июля 2010

Использовать CultureInfo.TextInfo.ListSeparator.

0 голосов
/ 14 июля 2010

Можно, но не с уверенностью 100% (но очень близко к этому). Обнаружение разделителя текста может быть сделано путем анализа файла (или приличного образца) и определения частот каждого символа в каждой записи. Разделитель текста должен быть одинаковым (или почти одинаковым) для каждой записи. Его частота будет на единицу меньше числа полей в каждой записи.

Хороший анализатор не будет подсчитывать символы, которые защищены двойными кавычками, поскольку они встроены, а не разделителями (т. Е. Не считать запятую в «Бостоне, МА 02066», поскольку она защищена двойными кавычками) .

Десятичные разделители могут быть определены после того, как вы определили текстовый разделитель. Просто посмотрите на соседние числа и посмотрите, что их разделяет (это не ранее определенный текстовый разделитель).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...