Які метадані “sep =” ви можете додати до CSV-файлів?


24

Під час спроби з'ясувати, як змусити CSV-файли правильно відкриватися в Excel на іспанському ПК (належить клієнту), я знайшов багато відповідей, що рекомендують використовувати sep=,у верхній частині файлу:

З огляду на це, такий підхід працює, але жоден із цих відповідей не дає додаткової інформації про те, звідки цей параметр метаданих. Я намагався шукати, що це означає (і, отже, знайшов усі ці відповіді), але не зміг отримати додаткової інформації, особливо з огляду на те, що пунктуацію, як відомо, важко шукати.

Моє головне питання полягає в тому, чи є це особливість Excel . Я підозрюю, що це є, але не знайшов нічого остаточного, щоб підтвердити це.

Деякі пов'язані питання:

  • Які символи можна використовувати в цій настройці?
  • Які інші налаштування доступні (наприклад, символ припинення рядка, символ цитування тощо).
  • Чи є інші інструменти, які офіційно підтримують цю функцію?

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

Деякі роз’яснення:

Параметр sep=не є аналізатором. Він призначений для розміщення всередині CSV. Приклад:

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"

4
Так, це конкретно .
Райстафаріан

2
Чи вдалося вам на цьому щось добути? Я наткнувся на те саме питання, і я ще не знайду специфікацій MS, які описують цю особливість. Якщо ця особливість недокументована MS, як чорт узяв її в першу чергу?
toddlermenot

@toddlermenot На жаль, ні. Все, що я отримую, - це люди, які стверджують, що це специфічний Excel, що не має нічого резервного для цього твердження, що невтішно.
Бурхан Алі

Відповіді:


7

RFC 4180 загальновизнаний як стандарт для формату CSV, і жодної такої функції не згадується.

Модель W3C для табличних даних та метаданих в Інтернеті згадує її як особливість, що не входить до їх сфери:

Багато файлів "CSV" вбудовують метадані, наприклад, у рядки перед заголовком ряду CSV-документа. Ця специфікація не визначає жодних форматів для вбудовування метаданих у файли CSV, окрім назв стовпців у рядку заголовка.

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


Гарне джерело. Я повинен сказати одне, що sep = | визначає сепаратор для використання в Excel як символ труби ('|'). Він не використовується широко, але не є ексклюзивним для Excel. Це директива щодо сепаратора. Міжнародні версії Excel iirc мають різні символи, наприклад, європейська мова на машині, що працює у програмі excel, використовує крапки з комою.
var firstName

1
Мені відомо про використання (можливо, це було не зовсім зрозуміло з моєї відповіді). Я щойно вказував, що, схоже, Excel запровадив цю функцію, вона базується на будь-якому (публічному) стандарті.
Стефан Кьогль

0

Внести свій внесок у відповідь на одне із ваших запитань: "Чи є інші інструменти, які офіційно підтримують цю функцію?"

Це не підтримується Apple Numbers (я тестував за допомогою Numbers версії 3.6.2).

Він також не підтримується ні csv2json ( https://www.npmjs.com/package/csv2json ), ні csvtojson ( https://www.npmjs.com/package/csvtojson ).


-1

Інструкція sep = використовується у всіх країнах, де кома використовується як десятковий роздільник, як Італія. Оскільки Excel експортує CSV, використовуючи крапки з комою, а не коми в цих країнах, якщо ви хочете бути впевнені, що файл можна прочитати в США чи інших країнах, вам потрібно

sep =;

зверху файлу. Це специфічно для Excel, і його можуть ігнорувати інші програми.


-2

Майже про будь-який інструмент, який може імпортувати файли .csv, визнає, що кома - не єдиний можливий роздільник, наприклад, вкладки вже давно поширені. Я думаю, що це відноситься навіть до часів перфокарт, що там повинен бути якийсь символ, який визнається кінцевим полем даних - за винятком систем, які використовують поля фіксованої ширини або попередньо встановлені поля довжиною майже для кожної системи. з моменту появи комп’ютерів.

3 основні елементи - це роздільник поля, роздільник записів і кінець маркера даних, csv за замовчуванням використовує кому, новий рядок і кінець файлу для цих відповідно, але майже будь-який допустимий вхід може бути використаний, але вам потрібен механізм для уникнення спеціальних маркерів, якщо вони є у ваших дійсних даних.

В одній історичній системі я натрапив на використаний новий рядок для кінця поля, 2 порожніх рядка для кінця запису та *!*!* END *!*!*для кінця даних. Я зазвичай стикався з усіма ,\t|:використовуваними як розділювач поля разом з різними символами управління.

Варто насторожитися, що французи та інші використовують коску в якості десяткової крапки - це може спричинити всілякі розваги та ігри. Існує ступінь стандартизації для CSV-файлів у rfc4180, але є випадки, коли вам потрібно вручну редагувати файли під час експорту з однієї програми та імпорту в іншу.

Наприклад, щоб відповісти на другу частину вашого запитання, Python, наприклад, включає в себе читач / запис csv як одну із стандартних бібліотек, яка пропонує такі варіанти:

  • delimiter- Це роздільник поля, (якщо не вийшов ).
  • doublequote- Якщо вірно, то в " межах поля буде представлено як""
  • escapechar- видаляє будь-яке спеціальне значення з будь-якого наступного символу, наприклад, якщо його встановлено, \тоді цитата може бути представлена ​​як\"
  • lineterminator- як правило , один з \n, \r, \r\nабо\n\r
  • quotechar- символ, який зазвичай використовується для цитування рядків, "або'
  • quoting - прапор як один із:
    • ALL - Кожне поле є в лапках, тобто: "1","Free Beer","ASAP"
    • MINIMAL - Тільки поля цитат, які мають спеціальні символи, тобто: 1,"Beer, (Free)", Now, Please
    • QUOTE_NONNUMERIC - Цитувати все, що не є числом, тобто: 1,"Beer, (Free)", "Now", "Please"
    • NONE - Не цитуйте замість цього втечу, тобто: 1,Beer\, (Free), Now, Please
  • skipinitialspace- пропустити будь-який провідний простір кожного поля, щоб ви могли використовувати, , а не просто ,як роздільник поля.

Як правило, більш гнучким і продуманим інструментом, який може імпортувати файли csv, є більше таких варіантів (можливо, з різними іменами та / або механізмами).


2
Це не відповідає на моє запитання. Це пояснює, що таке CSV, про що я вже знаю. Моє запитання стосується конкретного синтаксису. Чи є довідка, яку я можу додати до свого питання, щоб уточнити речі?
Бурхан Алі

1
Дякую, але це все ще не допомагає. sep=не є параметром аналізатора. Я додав уточнення до свого питання.
Бурхан Алі

1
@SteveBarnes Але чи будь-який інструмент, наприклад бібліотека Python, яку ви згадуєте, допускає параметри як частину вмісту файлу? Це, я думаю, головний пункт питання.
Ренді Оріссон

1
"Тому що вони одна з багатьох чудових дивацтв". Це все-таки? Це частина того, що я намагаюся розробити. Я не хочу знати, що таке CSV. Я не хочу знати, як розібрати CSV. Я хочу знати, що sep=це і звідки воно походить.
Бурхан Алі

2
sep = - це метод підказки специфічного для Microsoft Excel, який не охоплюється жодними специфікаціями, які не є Microsoft, які я можу знайти. Він походить з частини Microsoft.
Стів Барнс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.