Как стать автором
Обновить

Комментарии 42

забавно, значит мне везло и проблем не было :)
Так тут специальный пример на проверку соответствия стандарту по RFC, поэтому и проблемы. Микрософт даже свой собственный OpenXML не соблюдает, а тут всего лишь какой-то RFC.
RFC носит лишь рекомендательный характер.
если строго следовать RFC, то никакие «неанглийские» символы не могут присутствовать в файле:

TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
В TAoUP есть глава про CSV. Там вывод, что все плохо и по-хорошему оставить нужно только 2 специальных знака — разделитель полей и квотирование (следующий символ оставлять как есть).
А разделитель строк?
\n или \r\n как и все остальное на платформе (к кодировке тоже относится).
Вообще, удивительно, читаем там же:
Microsoft имеет несовместимые версии CSV-файлов между собственными приложениями, а в некоторых случаях между различными версиями одного приложения (очевидный пример — программа Excel).
Ну что за привычка отвечать на вопрос вне контекста? :(

Вы пишете: «вывод, что все плохо и по-хорошему оставить нужно только 2 специальных знака — разделитель полей и квотирование».

Я спрашиваю: «а разделитель строк?»
www.faqs.org/docs/artu/ch05s02.html

Дословно: «one record per line», т.е. да, разделитель записей тоже нужен, но как разделять строки все же не наше дело.
Для преобразования «автопреобразованных» колонок назад помогает указать формат ячейки «Дополнительный». По крайней мере для «длинных» чисел работает.
«CSV является стандартом де-факто» и «стандарта CSV как такового, к сожалению, нет» — как-то грустно вместе звучит. Избегаю CSV везде, где могу.
К сожалению, не всегда это возможно. Многие Прикладные программы выгружают данные именно в этом формате. Всякие там банк-клиенты и прочие. :(
Почему «Прикладные» с большой буквы — не знаю, само получилось.
Слышал, Apple отчёты о продажах присылает в tsv. Их очень удобно AWK'ом обрабатывать.
Получилась статья не про CSV, а про то, какие плохие продукты Microsoft. Но ведь можно ими просто не пользоваться! Им есть менее кривые (хотя бы в деле работы с CSV) аналоги.
НЛО прилетело и опубликовало эту надпись здесь
На мой взгляд офис для виндов майкрософта — это шедевр, который еще никто не повторил. Старофисы и опенофисы, как и маковский воркс — это все сильно слабее, даже не функционально, а вкупе с удобством, в деталях… Просто у него есть минусы и нужно понимать, как с ними жить. Раз приходится с ними жить.
Собственно косяки с csv вынудили держать вместе с MS Office еще и ООо. Для таблиц всегда пользуюсь calc (хватает для всех обычных задач, включая анализы и графики для отчетов), а вот word пока существенно лучше работает чем writer.
Хех, OpenOffice.org и тут рулит: при импорте/экспорте можно явно задать настройки кодировки, разделителей и экранирования, а в MS Office разделитель запросто может взяться из локали, сколько бубнов уже порвали на эту тему :(
Это все просто от незнания продукта :) В Office это тоже есть :)
Это не очень помогает, когда CSV-файл генерируется сайтом, а клиенты с MS Office'ом находятся в разных странах…
что не помогает? при экспорте из текстового файла, мастере выбрать разделитель и тут же в окне предпросмотра понять что вы выбрали неправильный разделитель?
Ничего, что я сейчас про импорт?
Сори, я оговорился — при ИМПОРТЕ из текстового файла. Ведь Сайт экспортирует файл CSV, а потом клиент в MS Office Excel ИМПОРТирует его через мастер. В мастере при импорте можно сразу до открытия файла выбрать разделитель полей, и увидеть в предпросмотре результат импорта при указанном разделителе.
Понятно. Теперь объяснить бы то же самое современному пользователю. Бизнес-пользователю. Они выше всего этого :(
Ну вообще решения тут как минимум два. С одной стороны при выгрузке можно посмотреть User Agent и выбрать соответствующий разделитель. С другой стороны, на странице загрузки или в файле архиве вложить инструкцию по экспорту.

Но к слову, если ваши клиенты вче равно читают файл в Excel выгружайте им в Excel (HTML + правильные свойства у ячеек в таблице)
Не подскажете название продукта (а такой есть), который позволяет понизить «безопасность» Outlook путем разрешения макросам доступа к контактам и отсылке писем. Можно было бы тогда написать «костыль» для переброски контактов туда-сюда (в Excel «причесывать» контакты сподручнее…
Вообще что бы не устраивать танцев с бубнами при импорте CSV файла в Excel линейке инструментов, есть таб «Данные» (Data), и в ней кнопка — «из текстового файла» (From text). При этом поднимается Мастер который по шагам вам поможет импортировать файл. Где в том числе спрашивается какой знак является разделителем. Все остальное — от не знания :)
Если вы немножко внимательнее посмотрите на статью, там про это написано. И написано, какая недоработка есть в этом импорте. Например, он не понимает переводов строк внутри полей. Проблема с ведущими нулями и кавычками также остается.
Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.



Ошибки Excel-я при импорте:
1.Учлись пробелы, окружающие разделители
2.Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
3.В поле индекс Excel «опустил» ведущие нули.
4.в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол

Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:


и дальше идет текст где вы называете все это "импорт". Когда вы все это разобрали, вы потом вспоминаете что еще есть «еще один способ» которые тоже назывется импортом. Как то все в кучу смешано, вы не находите?
Стас, хватит издеваться, я тебя узнал :)
Да я и не прятался.
отдел Системной интеграции нашей компании разделяет вашу боль :)
В англоязычной версии Excel разделителями являются именно запятые.
Дело же не в версии Excel, а в региональных настройках в вашей ОС
Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.
ходят слухи, что ms office понимает csv в utf-8 когда в начале файла есть нужный BOM (так-ли это на самом деле не могу проверить за неимением сего чуда).
забавные вещи эксплуатируют свободные память и другие ресурсы зам-CTO Mail.ru Group )
Спасибо за решение проблемы с 11-12-ти значными числами…
Excel превращал число в запись вида 3.1E+11))
Теперь собственно пишу так: =«12312313313»;=«123123434233434»;…
Ещё способы обхода этой проблемы: 1) апостроф перед числом 2) пометить (заранее) формат ячеек как «текст».
При импорте из файла, кстати, тоже полезно бывает импортируемые колонки поментить как «текст», чтобы строка типа «01.01» не превращалась в «1 января» :)
Office 2013, проблемы так и остались. Где написано «разделители — запятые» будет точка с запятой, двойной клик по CSV откроет его в Excel, не разделяя на колонки и ни о чём не спрашивая.
Классический workaround — изменить расширение файла в ".txt", тогда поднимается полноценный визард.
Но то, что до сих пор сделали по уму — это очень странно, мягко говоря :)
Еще несколько хинтов, коллеги:

1) Чтобы Excel начал спрашивать о параметрах CSV — переименуйте предварительно файл с расширением .txt

2) При импорте из Excel в CSV — если вам нужны разделители в качестве ",", а не ";" как это делается по-умолчанию — то нужно временно изменить региональные настройки:
а) В операционной системе Microsoft Windows нажмите кнопку Пуск и выберите пункт Панель управления.
б) Откройте диалоговое окно изменения региональных и языковых параметров.
в) Введите новый разделитель в поле Разделитель элементов списка. Кстати в этом же окне можно изменить и дробную часть с запятой на точку.
г) Дважды нажмите кнопку ОК.
Теперь при импортировании будут учитываться новые значения разделителей.
Спасибо!
Зарегистрируйтесь на Хабре , чтобы оставить комментарий