CSV с запятой или точкой с запятой?

80

Как вообще создается файл CSV? Через запятую или точку с запятой? Любой совет, какой из них использовать?

membersound
источник
5
См. Раздел « Значения, разделенные запятыми» (Википедия).
Jesper
4
CSV -> Значения,
разделенные
@ChadNC Я тоже подумал об этом при выборе разделителя, который будет использовать мой код. Самым простым решением было использование ;, которое автоматически распознается как в Ubuntu, так и в Windows, без необходимости диктовать какие-либо конкретные настройки.
gsamaras

Ответы:

77

В Windows это зависит от экрана настройки «Язык и региональные стандарты», где находится разделитель списка. Это символ, который приложения Windows ожидают в качестве разделителя CSV.

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

Если вы пишете программу для Windows, которая требует импорта CSV в другие приложения, и вы знаете, что для ваших целевых машин установлен разделитель списков ,, то сделайте это, в противном случае я предпочитаю, ;поскольку это вызывает меньше проблем с десятичными точками, группировкой цифр и не появляется в большом количестве текста.

Сибстер
источник
35
Это изменение также повлияет на открытие файлов CSV в Excel. Если вы хотите сделать более совместимый с Windows файл CSV, поместите его sep=;поверх файла CSV.
Папо
11
> «Я предпочитаю; так как это вызывает меньше проблем с десятичными точками». Это неправильное решение. Если вашим разделителем является запятая, а значение ячейки также содержит запятую, вы должны заключить значение в двойные кавычки. Например: 111,222, «33,5», 444, «55,98», 666
Эльм,
1
Это также относится к приложению Mac Numbers. Я выдергивал волосы, потому что не мог создать CSV, который распознал Photoshop. Я снова сменил регион на американский английский, и все снова
Тибидабо,
21
Эта региональная вещь - самая глупая вещь, которую когда-либо можно было сделать. Как формат csv может отличаться в разных регионах, это означает, что мои коллеги не могут открывать или сохранять csv для парней с компьютером в другом регионе ... ай
Мигель
Если вы программируете в Windows Cили C++под Windows, вы можете использовать следующий API для получения общесистемного или пользовательского разделителя:GetLocaleInfo(lcid, LOCALE_SLIST, buff, _countof(buff));
ahmd0
52

Я бы сказал, придерживайтесь запятой, поскольку это широко известно и понятно. Обязательно укажите свои ценности и избегайте цитат.

ID,NAME,AGE
"23434","Norris, Chuck","24"
"34343","Bond, James ""master""","57"
Адаршр
источник
5
+1 за покрытие множества сценариев csv на очень коротком примере
Нильс Бринч
1
Отдельное разделение запятыми - это хорошо, но возникают проблемы, когда вы получаете поля, в которых есть запятые. Вот хорошая ссылка, которую я нашел в руководстве
Ibu
4
НЕПРАВИЛЬНО! На моем компьютере, если я напишу файл CSV, используя запятые в качестве разделителей, и открою его в Excel, я получу, что вся строка будет занимать только один столбец! Это должны быть региональные настройки Windows!
sergiol
2
@sergiol Я не уверен, как это опровергает то, что они сказали.
AMC,
51

CSV - это стандартный формат, описанный в RFC 4180 (в 2005 г.), так что недостатка в стандарте нет. https://www.ietf.org/rfc/rfc4180.txt

И даже до этого C в CSV всегда означало запятую, а не semiColon :(

Жаль, что Microsoft продолжает игнорировать это и по-прежнему придерживается той чудовищности, в которую они превратили это десятилетия назад (да, я признаю, это было до создания RFC).

  • По одной записи в строке, если в цитируемом тексте не встречается символ новой строки (см. Ниже).
  • ЗАПЯТАЯ как разделитель столбцов. Никогда не точка с запятой.
  • ПЕРИОД как десятичная точка в числах. Никогда не запятая.
  • Текст, содержащий запятые, точки и / или новые строки, заключенный в «двойные кавычки».
  • Только если текст заключен в двойные кавычки, такие кавычки в тексте экранируются двойными кавычками. Эти примеры представляют те же три поля:

    1, "этот текст содержит" "кавычки" "", 3

    1, этот текст содержит «кавычки», 3

Стандарт не охватывает значения даты и времени, лично я стараюсь придерживаться формата ISO 8601, чтобы избежать путаницы день / месяц / год - месяц / день / год.

Люк ВдВ
источник
16
Уродство никогда бы не появилось, если бы в первую очередь была выбрана точка с запятой. Запятая используется не только для десятичных знаков или разделителя тысяч, но также очень часто в тексте, в отличие от точки с запятой. Точка с запятой была бы лучшим выбором, потому что она встречается гораздо реже ...
AFract
14
Когда я сказал чудовищность, я имел в виду, что Microsoft сделала это языково зависимым. Excel открывает файлы CSV и рассматривает их как электронные таблицы и может сохранять электронные таблицы в формате CSV, но файл CSV, сохраненный Excel в США (например), не будет работать, если кто-то во Франции или Бельгии попытается открыть его, и наоборот. Какой бы стандарт мне ни был подходит, пока есть стандарт, который работает для всех.
Luc VdV
4
«CSV - это стандартный формат, описанный в RFC 4180 (в 2005 году), поэтому недостатка в стандарте нет». К сожалению, RFC 4180 - это запрос на комментарии, а НЕ стандарт. Вверху написано: «не указаны какие-либо стандарты Интернета». Позже говорится, что RFC 4180 «документирует формат, который, по-видимому, следует большинству реализаций». Похоже, что это было создано небольшой частной компанией, не связанной ни с одним стандартом. Это отличная отправная точка, но, к сожалению, существует множество файлов CSV, которые не соответствуют этому «стандарту».
Джим Ри
9
ВСЕ интернет-стандарты называются RFC.
Luc VdV
2
Но когда они являются стандартными, в них не говорится, что они не предназначены для использования в качестве нормативных. Вместо этого у них есть ряд нормативных разделов внутри, что не относится к RFC 4180.
Фредерик
42

Также актуально, но специально для того, чтобы преуспеть, посмотрите этот ответ и этот другой, который предлагает вставить строку в начало CSV с

"sep=,"

Чтобы сообщить Excel, какой разделитель ожидать

Рафарейно
источник
3
Он работает с Excel, но не распознается Microsoft Power BI.
Томас Кубес
9

1.> Измените формат файла на .CSV (разделенные точкой с запятой)

Для достижения желаемого результата нам необходимо временно изменить delimiterнастройку в ExcelОпциях:

Move to File -> Options -> Advanced -> Editing Section

Снимите флажок с параметра «Использовать системные разделители» и поставьте запятую в поле «Десятичный разделитель».

Теперь сохраните файл в .CSVформате, и он будет сохранен в формате, разделенном точкой с запятой.

Hugo Bourret-Desmarais
источник
6

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

http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard


источник
Этот раздел статьи из Википедии исчез. Возможно, вы захотите повторно указать ссылку на en.wikipedia.org/wiki/Comma-separated_values#Basic_rules , здесь есть отрывок о локали:> « Смежные поля должны быть разделены одной запятой. Однако форматы« CSV »сильно различаются по этот выбор символа-разделителя. В частности, в языковых стандартах, где запятая используется как десятичный разделитель, вместо нее используются точка с запятой, TAB или другие символы ".
Жюль
4

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

Чтобы посоветовать вам, что использовать, нам нужно знать ваше приложение. Является ли файл специфичным для вашего приложения / программы, или он должен работать с другими программами?

Юсеф Г.
источник
6
Я думаю, что в Европе; преобладает. В основном потому, что у нас есть запятые в числах вроде 60,00 €.
oers
5
@oers Это не имеет значения, если вы придерживаетесь "quote"своих ценностей.
adarshr
Ну, я в основном видел другие разделители, используемые в сетевых файлах семян, но европейские деньги тоже работают!
Юсеф Г.
4

Чтобы изменить запятую на точку с запятой в качестве разделителя Excel по умолчанию для CSV - перейдите в Регион -> Дополнительные настройки -> вкладка Числа -> Разделитель списка и введите; вместо значения по умолчанию

Майкл
источник
1
Если в ваших региональных настройках используется ,десятичный разделитель и вы экспортируете файл со столбцами, разделенными знаком, ,когда вы открываете его в Excel, текст будет отображаться ТОЛЬКО в ОДНОМ столбце. В Excel 2013 выберите первый столбец, перейдите в ДАННЫЕ -> Текст в столбцы -> Выбрать Delimited, нажмите, Nextзатем выберите только Commaна, Delimitersи вы сразу увидите изменения в Data previewи, наконец, нажмитеFinish
sergiol
2

Хорошо, чтобы просто сказать несколько слов о точке с запятой. Во многих странах для обозначения десятичной дроби используется запятая, а не точка. В основном колонии ЕС, которые состоят из половины мира, другая половина соответствует стандарту Великобритании (как, черт возьми, Великобритания такая большая O_O), поэтому, в свою очередь, использование запятой для базы данных, которая включает номер, создает большую часть головной боли, потому что Excel отказывается распознавать ее как разделитель .

Как и в моей стране, Вьетнаме, следуйте французскому стандарту, наш партнер Гонконг использует британский стандарт, поэтому запятая делает CSV непригодным для использования, а мы используем \ t или; вместо этого для международного использования, но это все еще не "стандарт" в соответствии с документом CSV.

Чан Ву Данг Кхоа
источник
-3

Лучше всего сохранить его в текстовом файле с расширением csv:

Sub ExportToCSV()
Dim i, j As Integer
Dim Name  As String

Dim pathfile As String

Dim fs As Object
    Dim stream As Object

    Set fs = CreateObject("Scripting.FileSystemObject")
On Error GoTo fileexists

i = 15
Name = Format(Now(), "ddmmyyHHmmss")
pathfile = "D:\1\" & Name & ".csv"

Set stream = fs.CreateTextFile(pathfile, False, True)

Файл существует:

If Err.Number = 58 Then
    MsgBox "File already Exists"
    'Your code here
    Return
End If
On Error GoTo 0

j = 1
Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)

    stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))

    j = j + 1
    i = i + 1
Loop


stream.Close

End Sub
АзизД
источник