2012-04-13 2 views
44

Как создается CSV-файл вообще? С запятыми или с запятой? Любые советы, по которым можно использовать?CSV с запятой или точкой с запятой?

+2

См. [Значения, разделенные запятой] (http://en.wikipedia.org/wiki/Comma-separated_values) (Википедия). – Jesper

+1

CSV -> Comma Отдельные значения – ChadNC

ответ

40

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

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

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

+12

Это изменение также повлияет на открытие файлов CSV в Excel. Если вы хотите сделать более совместимым для CSV-файла Windows, поместите 'sep =;' поверх файла CSV. – papo

+4

> «Я предпочитаю, так как это вызывает меньше проблем с десятичными точками». Это неправильное решение. Если ваш разделитель является запятой, а значение ячейки также содержит запятую, вы должны заключить это значение в двойные кавычки. Например: 111,222, «33,5», 444, «55,98», 666 – Elmue

+0

Это также относится к Mac Numbers. Я вытаскивал свои волосы, потому что я не мог сделать CSV, что распознал Photoshop. Я изменил вариант региона обратно на английский английский, и все снова отлично работало. – Tibidabo

2

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

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

+5

Я думаю, в Европе; распространен. В основном потому, что у нас есть запятые в цифрах, например, 60,00 €. – oers

+5

@oers Это не имеет значения, если вы «цитируете» свои значения. – adarshr

+0

Ну, я в основном видел другие разделители, используемые в сетевых файлах семян, но европейские деньги тоже работают! –

33

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

ID,NAME,AGE 
"23434","Norris, Chuck","24" 
"34343","Bond, James ""master""","57" 
+4

+1 для покрытия множества сценариев csv с очень коротким примером –

+1

Запятая сама по себе хорошо, но вы получаете проблемы, когда получаете поля, в которых есть запятые. Вот хорошая ссылка, которую я нашел [в руководстве] (http://www.php.net/manual/en/function.fputcsv.php#56827) – Ibu

+1

НЕПРАВИЛЬНО!В моей машине, если я пишу CSV-файл с запятыми в качестве разделителей и открываю его в Excel, я получаю всю строку, чтобы занять только один столбец! Это должны быть региональные настройки Windows! – sergiol

4

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

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

23

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

И еще до того, C в CSV всегда стояла запятая, а не SEMICOLON :(

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

  • Одна запись в строке, если перевод строки не происходит в цитируемом тексте (см. ниже)
  • COMMA в качестве разделителя столбцов. никогда точкой с запятой.
  • PERIOD как десятичная точка в числах. Никогда не запятая.
  • Текст, содержащий запятые, периоды и/или новые строки, заключенные в «двойные кавычки».
  • Только текст, если текст заключен в двойные кавычки, такие знаки кавычек в тексте выходят из удвоения.Эти примеры представляют собой одни и те же три поля:

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

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

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

+4

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

+3

Когда я сказал чудовище, я имел в виду, что Microsoft сделала его зависимым от языка. Excel открывает файлы CSV и обрабатывает их как электронные таблицы и может сохранять электронные таблицы в формате CSV, но файл CSV, сохраненный Excel в США (например), не будет работать, если кто-то из Франции или Бельгии попытается открыть его, и наоборот. Какой бы стандарт ни подходит для меня, пока есть стандарт, который работает для всех. –

+0

Насколько я вижу, «ПЕРИОД как десятичная точка в числах» и «текст, содержащий периоды, должен быть заключен в двойные кавычки», а не является частью RFC4180. Но я согласен, что это хорошая рекомендация. – Fried

2

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

+1

Если ваши региональные настройки заданы с помощью ',' как десятичного разделителя и вы экспортируете файл с столбцами, разделенными ',', когда вы открываете его. В Excel текст появится в столбце ONLY ONE. В Excel 2013 выберите первый столбец, перейдите к DATA -> Text To Columns -> Выберите «Delimited», нажмите «Далее», затем выберите «Comma' на« Delimiters », и вы сразу увидите изменения в« Предварительный просмотр данных » и, наконец, нажмите «Finish» – sergiol

1

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

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

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

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

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

1

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

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

13

Также актуальна, но специально, чтобы преуспеть, смотреть на this answer и this other one, что наводит на мысль, вставив строку в начале CSV с

"sep=," 

Сообщать первенствовать, который сепаратор ожидать

+0

Он работает с Excel, но не распознается Microsoft Power BI. – qub1n

0

лучший способ будет сохранить его в текстовом файле с расширением 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) 

FileExists:

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 
Смежные вопросы