@ChadNC Я тоже подумал об этом при выборе разделителя, который будет использовать мой код. Самым простым решением было использование ;, которое автоматически распознается как в Ubuntu, так и в Windows, без необходимости диктовать какие-либо конкретные настройки.
gsamaras
Ответы:
77
В Windows это зависит от экрана настройки «Язык и региональные стандарты», где находится разделитель списка. Это символ, который приложения Windows ожидают в качестве разделителя CSV.
Конечно, это действует только в приложениях Windows, например, Excel не будет автоматически разбивать данные на столбцы, если файл не использует вышеупомянутый разделитель. Все приложения, использующие региональные настройки Windows, будут иметь такое поведение.
Если вы пишете программу для Windows, которая требует импорта CSV в другие приложения, и вы знаете, что для ваших целевых машин установлен разделитель списков ,, то сделайте это, в противном случае я предпочитаю, ;поскольку это вызывает меньше проблем с десятичными точками, группировкой цифр и не появляется в большом количестве текста.
Это изменение также повлияет на открытие файлов 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"
+1 за покрытие множества сценариев csv на очень коротком примере
Нильс Бринч
1
Отдельное разделение запятыми - это хорошо, но возникают проблемы, когда вы получаете поля, в которых есть запятые. Вот хорошая ссылка, которую я нашел в руководстве
Ibu
4
НЕПРАВИЛЬНО! На моем компьютере, если я напишу файл CSV, используя запятые в качестве разделителей, и открою его в Excel, я получу, что вся строка будет занимать только один столбец! Это должны быть региональные настройки Windows!
sergiol
2
@sergiol Я не уверен, как это опровергает то, что они сказали.
И даже до этого C в CSV всегда означало запятую, а не semiColon :(
Жаль, что Microsoft продолжает игнорировать это и по-прежнему придерживается той чудовищности, в которую они превратили это десятилетия назад (да, я признаю, это было до создания RFC).
По одной записи в строке, если в цитируемом тексте не встречается символ новой строки (см. Ниже).
ЗАПЯТАЯ как разделитель столбцов. Никогда не точка с запятой.
ПЕРИОД как десятичная точка в числах. Никогда не запятая.
Текст, содержащий запятые, точки и / или новые строки, заключенный в «двойные кавычки».
Только если текст заключен в двойные кавычки, такие кавычки в тексте экранируются двойными кавычками. Эти примеры представляют те же три поля:
1, "этот текст содержит" "кавычки" "", 3
1, этот текст содержит «кавычки», 3
Стандарт не охватывает значения даты и времени, лично я стараюсь придерживаться формата ISO 8601, чтобы избежать путаницы день / месяц / год - месяц / день / год.
Уродство никогда бы не появилось, если бы в первую очередь была выбрана точка с запятой. Запятая используется не только для десятичных знаков или разделителя тысяч, но также очень часто в тексте, в отличие от точки с запятой. Точка с запятой была бы лучшим выбором, потому что она встречается гораздо реже ...
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 с
Первоначально это должна была быть запятая, однако, поскольку запятая часто используется в качестве десятичной точки, она не была бы таким хорошим разделителем, поэтому другие, такие как точка с запятой, в основном зависят от страны
Этот раздел статьи из Википедии исчез. Возможно, вы захотите повторно указать ссылку на en.wikipedia.org/wiki/Comma-separated_values#Basic_rules , здесь есть отрывок о локали:> « Смежные поля должны быть разделены одной запятой. Однако форматы« CSV »сильно различаются по этот выбор символа-разделителя. В частности, в языковых стандартах, где запятая используется как десятичный разделитель, вместо нее используются точка с запятой, TAB или другие символы ".
Жюль
4
CSV - это файл, разделенный запятыми. Обычно разделителем является запятая, но я видел много других символов, используемых в качестве разделителей. Просто они используются не так часто.
Чтобы посоветовать вам, что использовать, нам нужно знать ваше приложение. Является ли файл специфичным для вашего приложения / программы, или он должен работать с другими программами?
Я думаю, что в Европе; преобладает. В основном потому, что у нас есть запятые в числах вроде 60,00 €.
oers
5
@oers Это не имеет значения, если вы придерживаетесь "quote"своих ценностей.
adarshr
Ну, я в основном видел другие разделители, используемые в сетевых файлах семян, но европейские деньги тоже работают!
Юсеф Г.
4
Чтобы изменить запятую на точку с запятой в качестве разделителя Excel по умолчанию для CSV - перейдите в Регион -> Дополнительные настройки -> вкладка Числа -> Разделитель списка и введите; вместо значения по умолчанию
Если в ваших региональных настройках используется ,десятичный разделитель и вы экспортируете файл со столбцами, разделенными знаком, ,когда вы открываете его в Excel, текст будет отображаться ТОЛЬКО в ОДНОМ столбце. В Excel 2013 выберите первый столбец, перейдите в ДАННЫЕ -> Текст в столбцы -> Выбрать Delimited, нажмите, Nextзатем выберите только Commaна, Delimitersи вы сразу увидите изменения в Data previewи, наконец, нажмитеFinish
sergiol
2
Хорошо, чтобы просто сказать несколько слов о точке с запятой. Во многих странах для обозначения десятичной дроби используется запятая, а не точка. В основном колонии ЕС, которые состоят из половины мира, другая половина соответствует стандарту Великобритании (как, черт возьми, Великобритания такая большая O_O), поэтому, в свою очередь, использование запятой для базы данных, которая включает номер, создает большую часть головной боли, потому что Excel отказывается распознавать ее как разделитель .
Как и в моей стране, Вьетнаме, следуйте французскому стандарту, наш партнер Гонконг использует британский стандарт, поэтому запятая делает CSV непригодным для использования, а мы используем \ t или; вместо этого для международного использования, но это все еще не "стандарт" в соответствии с документом CSV.
Лучше всего сохранить его в текстовом файле с расширением 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
;
, которое автоматически распознается как в Ubuntu, так и в Windows, без необходимости диктовать какие-либо конкретные настройки.Ответы:
В Windows это зависит от экрана настройки «Язык и региональные стандарты», где находится разделитель списка. Это символ, который приложения Windows ожидают в качестве разделителя CSV.
Конечно, это действует только в приложениях Windows, например, Excel не будет автоматически разбивать данные на столбцы, если файл не использует вышеупомянутый разделитель. Все приложения, использующие региональные настройки Windows, будут иметь такое поведение.
Если вы пишете программу для Windows, которая требует импорта CSV в другие приложения, и вы знаете, что для ваших целевых машин установлен разделитель списков
,
, то сделайте это, в противном случае я предпочитаю,;
поскольку это вызывает меньше проблем с десятичными точками, группировкой цифр и не появляется в большом количестве текста.источник
sep=;
поверх файла CSV.C
илиC++
под Windows, вы можете использовать следующий API для получения общесистемного или пользовательского разделителя:GetLocaleInfo(lcid, LOCALE_SLIST, buff, _countof(buff));
Я бы сказал, придерживайтесь запятой, поскольку это широко известно и понятно. Обязательно укажите свои ценности и избегайте цитат.
источник
CSV - это стандартный формат, описанный в RFC 4180 (в 2005 г.), так что недостатка в стандарте нет. https://www.ietf.org/rfc/rfc4180.txt
И даже до этого C в CSV всегда означало запятую, а не semiColon :(
Жаль, что Microsoft продолжает игнорировать это и по-прежнему придерживается той чудовищности, в которую они превратили это десятилетия назад (да, я признаю, это было до создания RFC).
Только если текст заключен в двойные кавычки, такие кавычки в тексте экранируются двойными кавычками. Эти примеры представляют те же три поля:
1, "этот текст содержит" "кавычки" "", 3
1, этот текст содержит «кавычки», 3
Стандарт не охватывает значения даты и времени, лично я стараюсь придерживаться формата ISO 8601, чтобы избежать путаницы день / месяц / год - месяц / день / год.
источник
Также актуально, но специально для того, чтобы преуспеть, посмотрите этот ответ и этот другой, который предлагает вставить строку в начало CSV с
Чтобы сообщить Excel, какой разделитель ожидать
источник
1.> Измените формат файла на .CSV (разделенные точкой с запятой)
Для достижения желаемого результата нам необходимо временно изменить
delimiter
настройку вExcel
Опциях:Снимите флажок с параметра «Использовать системные разделители» и поставьте запятую в поле «Десятичный разделитель».
Теперь сохраните файл в
.CSV
формате, и он будет сохранен в формате, разделенном точкой с запятой.источник
Первоначально это должна была быть запятая, однако, поскольку запятая часто используется в качестве десятичной точки, она не была бы таким хорошим разделителем, поэтому другие, такие как точка с запятой, в основном зависят от страны
http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard
источник
CSV - это файл, разделенный запятыми. Обычно разделителем является запятая, но я видел много других символов, используемых в качестве разделителей. Просто они используются не так часто.
Чтобы посоветовать вам, что использовать, нам нужно знать ваше приложение. Является ли файл специфичным для вашего приложения / программы, или он должен работать с другими программами?
источник
"quote"
своих ценностей.Чтобы изменить запятую на точку с запятой в качестве разделителя Excel по умолчанию для CSV - перейдите в Регион -> Дополнительные настройки -> вкладка Числа -> Разделитель списка и введите; вместо значения по умолчанию
источник
,
десятичный разделитель и вы экспортируете файл со столбцами, разделенными знаком,,
когда вы открываете его в Excel, текст будет отображаться ТОЛЬКО в ОДНОМ столбце. В Excel 2013 выберите первый столбец, перейдите в ДАННЫЕ -> Текст в столбцы -> ВыбратьDelimited
, нажмите,Next
затем выберите толькоComma
на,Delimiters
и вы сразу увидите изменения вData preview
и, наконец, нажмитеFinish
Хорошо, чтобы просто сказать несколько слов о точке с запятой. Во многих странах для обозначения десятичной дроби используется запятая, а не точка. В основном колонии ЕС, которые состоят из половины мира, другая половина соответствует стандарту Великобритании (как, черт возьми, Великобритания такая большая O_O), поэтому, в свою очередь, использование запятой для базы данных, которая включает номер, создает большую часть головной боли, потому что Excel отказывается распознавать ее как разделитель .
Как и в моей стране, Вьетнаме, следуйте французскому стандарту, наш партнер Гонконг использует британский стандарт, поэтому запятая делает CSV непригодным для использования, а мы используем \ t или; вместо этого для международного использования, но это все еще не "стандарт" в соответствии с документом CSV.
источник
Лучше всего сохранить его в текстовом файле с расширением csv:
Файл существует:
источник