CSV із комою чи крапкою з комою?


80

Як взагалі будується файл CSV? З комами чи крапками з комою? Будь-яка порада щодо того, який із них використовувати?



4
CSV -> Значення,
відокремлені

@ChadNC Я теж про це думав, вибираючи роздільник, який використовуватиме мій код. Найпростішим рішенням було використання ;, яке автоматично розпізнається як в Ubuntu, так і в Windows, без того, щоб мені потрібно було диктувати будь-які конкретні налаштування.
gsamaras

Відповіді:


77

У Windows це залежить від екрана налаштування "Регіональні та мовні параметри", де ви знайдете роздільник списку. Це символ програм Windows, які, як очікується, будуть роздільником CSV.

Звичайно, це діє лише у програмах Windows, наприклад, Excel не буде автоматично розділяти дані на стовпці, якщо файл не використовує згаданий вище роздільник. Усі програми, які використовують регіональні налаштування Windows, матимуть таку поведінку.

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


35
Ця зміна також вплине на відкриття файлів CSV в Excel. Якщо ви хочете зробити більш сумісним для Windows файл CSV, покладіть його sep=;зверху.
папо

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
Розділення комами самостійно - це добре, але у вас виникають проблеми, коли ви отримуєте поля, у яких є коми. Ось хороша довідка, яку я знайшов у посібнику
Ібу,

4
НЕПРАВИЛЬНО! У моїй машині, якщо я пишу файл CSV, використовуючи коми як роздільники та відкриваючи його в Excel, я отримую весь рядок, щоб займати лише один стовпець! Це має бути якась регіональна настройка Windows!
sergiol

2
@sergiol Я не впевнений, як це зневажає те, що вони сказали.
AMC

51

CSV - це стандартний формат, викладений у RFC 4180 (у 2005 році), тому стандарту не бракує. https://www.ietf.org/rfc/rfc4180.txt

І навіть до цього, C у CSV завжди стояла за комою, а не за півколоною :(

Шкода, що Microsoft продовжує це ігнорувати і все ще дотримується тієї жахливості, на яку вони перетворили її десятиліття тому (так, зізнаюся, це було до створення RFC).

  • Один запис на рядок, крім випадків, коли в цитованому тексті з’являється новий рядок (див. Нижче).
  • COMMA як роздільник стовпців. Ніколи крапка з комою.
  • PERIOD як десяткова точка в цифрах. Ніколи коми.
  • Текст, що містить коми, крапки та / або нові рядки, укладені в "подвійних лапках".
  • Тільки якщо текст укладено у подвійні лапки, такі лапки в тексті уникнуть подвоєння. Ці приклади представляють однакові три поля:

    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, які не відповідають цьому "стандарту".
Jim Rea

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форматі, і він буде збережений у форматі з крапкою з комою.


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)

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.