Как получить разделитель csv для текущей локали? [Дубликат]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к Словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)

5
задан Jon Cage 11 November 2011 в 13:34
поделиться

5 ответов

Файлы CSV в качестве предлагаемого названия должны быть разделены запятыми и не зависят от локальных. Однако то, что вы могли бы сделать, чтобы избежать этой проблемы, - это двойная кавычка соответствующих десятичных чисел в файле CSV как таковая: "10,20", "1,50", "This is another column". Это должно полностью исключить проблему для любого достойного CSV-парсера (например, библиотеки FileHelpers ), которая будет читать это как 10,20 и 1,50, а не как: 10, 20, 1 и 50.

См. CSV :

Более сложные реализации CSV допускают запятые и другие специальные символы в значении поля. Многие реализации используют символы (двойные кавычки) вокруг значений, которые содержат зарезервированные символы (такие как запятые, двойные кавычки или символы новой строки); встроенные символы двойной кавычки могут быть представлены двумя последовательными двойными кавычками

0
ответ дан Johannes Kommer 27 August 2018 в 08:57
поделиться

Использование:

System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator

Запись CSV: строка разделителя списков должна использоваться как разделители в CSV (см. ниже, как изменить эту переменную). Изменение значения «разделителя списков» также отражается в Excel при сохранении в качестве CSV.

Чтение CSV: определение разделителя в CSV - это еще одна история, и это немного сложнее. В принципе, можно использовать «,» как разделитель CSV в одной системе и использовать «;» или даже «*» или любой («строка») в качестве разделителя в другой системе. В этой статье содержится некоторое представление о том, как обнаружить разделители CSV, где считываются файлы CSV с межсистемными системами:

http : //www.codeproject.com/Articles/231582/Auto-detect-CSV-separator .

Также вы можете выполнить некоторые тесты для своего экспортера, изменив значение «разделитель списков» в Windows следующим образом (может отличаться для каждой ОС Windows):

  • Open Region и диалоговое окно «Язык».
  • Выберите вкладку «Формат».
  • Нажмите «Дополнительные настройки»
  • Измените значение «Селектор списков»
9
ответ дан Ahmad 27 August 2018 в 08:57
поделиться

Свойство CurrencyDecimalSeparator содержит десятичный разделитель для данной культуры. При этом разделитель CSV не зависит от культуры. Это свойство файла CSV, которое вы указываете синтаксическому анализатору. И говоря о парсерах, я искренне надеюсь, что вы не сворачиваете свой собственный синтаксический анализатор CSV .

5
ответ дан Darin Dimitrov 27 August 2018 в 08:57
поделиться

Как уже упоминалось, CSV вообще должен быть разделен запятой, а поля должны быть двойными. Однако существует также специфическое поведение MS Excel, которое приводит к неправильному импортированию правильного файла CSV. Это связано с тем, что по умолчанию MS Excel использует разделитель списков в Windows System в разделе «Региональные и языковые параметры». Для локали США / Великобритании это запятая, но для таких языков, как немецкий, это точка с запятой. Таким образом, для MS Excel опция заключается в использовании разных разделителей для каждой локали.

8
ответ дан machiev 27 August 2018 в 08:57
поделиться

Как уже рекомендовали другие, формат не должен быть чувствительным к локали. Это справедливо для хранения (в таких файлах, как CSV или другие форматы) или протоколов связи. Вы должны беспокоиться о чувствительности локали только к слою презентации. В противном случае это означает, что файл, сохраненный американским пользователем (например), не может быть загружен немецким (и наоборот).

Подробнее см. Здесь: http: / /mihai-nita.net/2005/10/25/data-internationalization/

0
ответ дан Mihai Nita 27 August 2018 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: