Формат данных CSV. Изучение и написание обзора формата CSV. Чем открыть CSV? Расширение csv

CSV (Comma-Separated Values) представляет собой файл текстового формата, который предназначен для отображения табличных данных. При этом колонки разделяются запятой и точкой с запятой. Узнаем, с помощью каких приложений можно открыть данный формат.

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

Способ 1: Microsoft Excel

Рассмотрим, как запустить CSV в популярном текстовом процессоре Эксель , который входит в пакет Microsoft Office.


Существует ещё один метод перехода в «Мастер текстов» .

  1. Переместитесь в раздел «Данные» . Нажимайте на объект «Из текста» , размещенный в блоке «Получение внешних данных» .
  2. Появляется инструмент «Импорт текстового файла» . Так же, как и в окошке «Открытие документа» , тут требуется перейти в область расположения объекта и отметить его. Выбирать форматы не нужно, так как при использовании этого инструмента объекты, содержащие текст, будут отображаться. Кликайте «Импорт» .
  3. Запускается «Мастер текстов» . В первом его окошке «Укажите формат данных» ставьте радиокнопку в положение «С разделителями» . В области «Формат файла» должен стоять параметр «Юникод (UTF-8)» . Нажимайте «Далее» .
  4. Теперь необходимо выполнить очень важный шаг, от которого будет зависеть корректность отображения данных. Требуется указать, что именно считается разделителем: точка с запятой (;) или запятая (,). Дело в том, что в разных странах в этом плане применяются различные стандарты. Так, для англоязычных текстов чаще применяется запятая, а для русскоязычных – точка с запятой. Но бывают и исключения, когда разделители применяются наоборот. Кроме того, в очень редких случаях в качестве разделителей используются другие знаки, например волнистая линия (~).

    Поэтому пользователь сам должен установить, служит ли в данном случае конкретный символ разделителем или является обычным знаком пунктуации. Это он может сделать, взглянув на текст, который отображается в области «Образец разбора данных» и основываясь на логике.

    После определения пользователем того, какой именно знак является разделителем, в группе «Символом-разделителем является» следует установить флажок около пункта «Точка с запятой» или «Запятая» . Со всех остальных пунктов флажки следует убрать. Затем нажимайте «Далее» .

  5. После этого открывается окно, в котором, выделив конкретный столбец в области «Образец разбора данных» , можно назначить ему формат для корректности отображения информации в блоке «Формат данных столбца» путем переключения радиокнопки между следующими положениями:
    • пропустить столбец;
    • текстовый;
    • дата;
    • общий.

    После выполнения манипуляций нажимайте «Готово» .

  6. Появляется окошко, в котором спрашивается, где именно расположить на листе импортируемые данные. Путем переключения радиокнопки это можете сделать на новом или уже имеющемся листе. В последнем случае также можно задать точные координаты расположения в соответствующем поле. Чтобы не вписывать их вручную, достаточно поставить курсор в это поле, а затем выделить на листе ту ячейку, которая станет левым верхним элементом массива, где будут добавлены данные. После установки координат жмите «OK» .
  7. Содержимое объекта отобразится на листе Эксель.

Способ 2: LibreOffice Calc

Запускать CSV умеет и другой табличный процессор – Calc, входящий в сборку LibreOffice .

  1. Запустите LibreOffice. Щелкайте «Открыть файл» или воспользуйтесь Ctrl+O .

    Также можете произвести переход через меню, нажав «Файл» и «Открыть…» .

    Кроме того, в окно открытия можно попасть и непосредственно через интерфейс Calс. Для этого, находясь в LibreOffice Calc, щелкайте по значку в виде папки или наберите Ctrl+O .

    Ещё один вариант предусматривает последовательный переход по пунктам «Файл» и «Открыть…» .

  2. Использование любого из множества перечисленных вариантов приведет к появлению окна «Открыть» . Переместитесь в нем в место нахождения CSV, отметьте его и жмите «Открыть» .

    Но можно даже обойтись без запуска окна «Открыть» . Для этого следует перетянуть CSV из «Проводника» в ЛибреОфис.

  3. Появляется инструмент «Импорт текста» , являющийся аналогом «Мастера текстов» в Экселе. Преимущество состоит в том, что в этом случае не придется перемещаться между различными окнами, выполняя настройки импорта, так как все необходимые параметры расположены в одном окошке.

    Сразу перейдите к группе настроек «Импорт» . В области «Кодировка» выбирайте значение «Юникод (UTF-8)» , если там отображается иное. В области «Язык» выберите язык текста. В области «Со строки» нужно указать, с какой именно строчки следует начинать импорт содержимого. В большинстве случаев в этот параметр изменение вносить не нужно.

    Далее переходим к группе «Параметры разделителя» . Прежде всего, необходимо установить радиокнопку в позицию «Разделитель» . Далее по такому же принципу, который был рассмотрен при использовании Эксель, нужно указать, установив флажок напротив определенного пункта, что именно будет играть роль разделителя: точка с запятой или запятая.

    «Другие параметры» оставляем без изменений.

    Предварительно увидеть, как именно выглядит импортируемая информация при изменении тех или иных настроек, можно в нижней части окна. После введения всех необходимых параметров нажимайте «OK» .

  4. Содержимое отобразится через интерфейс ЛибреОфис Кальк.

Способ 3: OpenOffice Calc

Просмотреть CSV можете с помощью ещё одного табличного процессора — OpenOffice Calc .

  1. Запустите ОупенОфис. В главном окне нажимайте «Открыть…» или используйте Ctrl+O .

    Также можете использовать меню. Для этого перейдите по пунктам «Файл» и «Открыть…» .

    Как и при использовании метода с предыдущей программой, добраться до окна открытия объекта можно прямо через интерфейс Кальк. В этом случае нужно нажать на иконку в образе папки или применить все то же Ctrl+O .

    Также можете использовать меню, перейдя в нем по позициям «Файл» и «Открыть…» .

  2. В появившемся окне открытия перейдите в область размещения CSV, выделите этот объект и жмите «Открыть» .

    Можно обойтись и без запуска этого окна, просто перетянув CSV из «Проводника» в ОупенОфис.

  3. Любое из множества описанных действий приведет к активации окошка «Импорт текста» , которое очень похоже и по внешнему виду, и по функционалу на инструмент с аналогичным наименованием в LibreOffice. Соответственно и действия производите точно такие же. В полях «Кодировка» и «Язык» выставляйте «Юникод (UTF-8)» и язык текущего документа соответственно.

    В блоке «Параметра разделителя» ставьте радиокнопку около пункта «Разделитель» , после чего отметьте флажком тот пункт («Точка с запятой» или «Запятая» ), который соответствует типу разделителя в документе.

    После выполнения указанных действий, если данные в отображаемой в нижней части окна форме для предварительного просмотра отображаются корректно, нажимайте «OK» .

  4. Данные будут успешно отображены через интерфейс ОупенОфис Кальк.

Способ 4: Блокнот

Для редактирования можно применять обычный Блокнот.


Способ 5: Notepad++

Открывать можно и с помощью более продвинутого текстового редактора — Notepad++ .


Способ 6: Safari

Просмотреть содержимое в текстовом варианте без возможности его редактирования можно в браузере Safari . Большинство других популярных браузеров такую возможность не предоставляют.


Способ 7: Microsoft Outlook

Некоторые объекты CSV представляют собой экспортированные из почтового клиента электронные письма. Их можно просматривать с помощью программы Microsoft Outlook , произведя процедуру импортирования.

  1. Запустите Аутлук. После открытия программы перейдите во вкладку «Файл» . Затем щелкните «Открыть» в боковом меню. Далее жмите «Импорт» .
  2. Запускается «Мастер импорта и экспорта» . В представленном перечне выбирайте «Импорт из другой программы или файла» . Нажимайте «Далее» .
  3. В следующем окне следует выбрать тип объекта для импорта. Если мы собираемся импортировать CSV, то необходимо выбрать позицию «Значения, разделенные запятыми (Windows)» . Жмите «Далее» .
  4. В следующем окошке жмите «Обзор…» .
  5. Появляется окно «Обзор» . В нем следует перейти в то место, где находится письмо в формате CSV. Обозначьте этот элемент и нажимайте «OK» .
  6. Происходит возврат в окошко «Мастера импорта и экспорта» . Как можете заметить, в области «Файл для импорта» был добавлен адрес на место расположения объекта CSV. В блоке «Параметры» настройки можно оставить по умолчанию. Жмите «Далее» .
  7. Затем нужно отметить ту папку в почтовом ящике, в которую вы хотите поместить импортируемую корреспонденцию.
  8. В следующем окне отобразится наименование действия, которое будет выполнено программой. Тут достаточно нажать «Готово» .
  9. После этого, чтобы просмотреть импортированные данные переместитесь во вкладку «Отправка и получение» . В боковой области интерфейса программы выделите ту папку, куда было импортировано письмо. Затем в центральной части программы появится список писем, находящихся в данной папке. Достаточно щелкнуть по нужному письму дважды левой кнопкой мыши.
  10. Импортированное из объекта CSV письмо будет открыто в программе Аутлук.

Стоит, правда, заметить, что данным способом можно запустить далеко не все объекты формата CSV, а только письма, структура которых отвечает определенному стандарту, а именно содержащие поля: тема, текст, адрес отправителя, адрес получателя и др.

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

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

Программа 1: Microsoft Excel

Файл с расширением CSV хранит в себе данные, заключенные в табличный формат. Исходя из этого можно сделать вывод, что с ним взаимодействуют табличные редакторы. И это верный вывод. Именно поэтому при возникновении вопроса: "Чем открыть CSV?", большинство пользователей предлагают использовать один из самых популярных табличных редакторов - MS Excel.

Итак, перейдем непосредственно к тому, как открыть CSV в Excel:

  1. Откройте приложение и на главном окне нажмите по вкладке "Файл".
  2. В появившемся интерфейсе нажмите по пункту "Открыть". К слову, для вызова функции "Открыть" можно использовать сочетание горячих клавиш Ctrl+O.
  3. Откроется окно файлового менеджера, в котором вам необходимо перейти в папку с файлом CSV, выделить его и нажать кнопку "Открыть".
  4. Выбранный вами файл сначала запустится в "Мастере текстов", в котором необходимо будет произвести настройку некоторых параметров перед вставкой данных в книгу Excel.
  5. Сначала вам необходимо поставить отметку напротив пункта "с разделителями", который находится в области "Формат исходных данных".
  6. Затем вам нужно выбрать непосредственно кодировку, которая будет использоваться для расшифровки данных файла. В нашем регионе применяется (UYF-8)". Выберите ее из списка
  7. Нажмите кнопку "Далее".
  8. На втором этапе в Мастере текстов вам необходимо определиться с символом-разделителем, выбрав или точку с запятой, или запятую. Дело в том, что от этого будет зависеть корректность отображения добавляемой таблицы. Проще всего это сделать ориентируясь на образец, который приведен в нижней части окна. Выберите один из представленных пунктов и нажмите "Далее".
  9. На третьем шаге вам будет предложено задать формат каждому столбцу отдельно. На самом деле в этом нет необходимости, так как на отображение данных это никак не повлияет, поэтому нажмите "Готово".
  10. Появится новое окно, в котором вам необходимо выбрать область, в которую будет вставлена добавляемая таблица. Обычно выделяют ячейку "A1" и нажимают кнопку "OK".

После этого содержимое файла будет вставлено в таблицу. Теперь вы знаете, чем открыть CSV. Но это только одна программа, переходим к следующей.

Программа 2: LibreOffice Calc

На втором месте по популярности среди табличных редакторов программа LibreOffice Calc. Конечно, процесс открытия CSV в ней мало чем отличается от предыдущей программы, но описать его все же стоит.

  1. Запустите приложение и в главном меню нажмите по кнопке "Открыть файл". Также это действие можно произвести, нажав Ctrl+O.
  2. Появится окно файлового менеджера. В нем вам нужно выбрать файл CSV и нажать кнопку "Открыть".
  3. Появится окно, подобное Мастеру текстов в Excel, только вместо разделения всех действий на три этапа, все действия производятся в одном окне.
  4. В области "Импорт" выберите следующие параметры: "Кодировка" - "Юникод (UTF-8); "Язык" - "Русский"; "Со строки" - "1".
  5. В области "Параметры разделителя" укажите пункт "Разделитель" и выберите "Запятая" или "Точка с запятой", как было рассказано выше, в зависимости от используемого разделителя в тексте файла.
  6. Нажмите "ОК".

Таблица будет вставлена. Итак, вы узнали второй метод, чем открыть CSV, теперь перейдем к третьему.

Программа 3: "Блокнот"

Как бы странно это ни звучало, но формат CSV можно открыть даже в "Блокноте". Как говорилось в начале статьи, это файл текстового формата, соответственно, вы можете его открыть в текстовом редакторе. Итак, вот, что нужно сделать:

  1. Запустите "Блокнот" и нажмите Ctrl+O.
  2. В "Проводнике" выберите файл.
  3. После этого он будет открыт в программе.

Вот так просто можно открыть CSV в обычном "Блокноте".

Заключение

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

Файл с расширением «csv» - это текстовый документ, который используется для представления и обработки данных в различных программных продуктах. Структура файла «csv» представляет собой строки, разделенные запятыми. Каждая строка является строкой в таблице, а запятые служат для разделения этих строк на колонки.

На заметку!

История создания файла берет начало с 1967 года. Тогда этот формат впервые начал использоваться для компьютеров IBM под управлением операционной системы OS/360. Несмотря на довольно большой срок службы такого формата, он до сих пор не утратил свою актуальность и используется в табличных процессорах и программах, которые обрабатывают базы данных.

Какой программой открыть файл csv?

Формат документа «csv» является обычным текстовым файлом. Чтобы быстро его отредактировать, вам всего лишь потребуется блокнот или бесплатный текстовый редактор Notepad++. Скачать его можно . Пример открытия в программе Notepad++ изображён на рисунке ниже.

На заметку!

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

Наиболее популярными табличными процессорами являются:

  • Gnumeric;
  • Microsoft Excel;
  • LibreOffice Calc;
  • OpenOffice Calc;
  • Kingsoft Spreadsheets.

Например, LibreOffice можно скачать с официального сайта .

Кроме табличных редакторов файл «csv» используется в различном специализированном ПО, которое хранит в нем данные. Также, компания Google использует в своих продуктах этот формат для импорта и экспорта контактов в Gmail.

Как открыть csv файл?

Теперь разберемся на подробном примере открытия «csv» файла. Для этого воспользуемся табличным редактором LibreOffice Calc, который входит в бесплатный офисный пакет LibreOffice:


Надеемся, с нашей статьей вы сможете разобраться с данной проблемой. Вопросы оставляйте в комментариях!

Текстовые документы формата CSV применяются многими компьютерными программами для обмена данными между друг другом. Казалось бы, что в Экселе можно произвести запуск такого файла стандартным двойным кликом по нему левой кнопкой мыши, но далеко не всегда в таком случае данные отображаются корректно. Правда, есть другой способ просмотреть информацию, содержащуюся в файле CSV . Давайте узнаем, как это можно сделать.

Название формата CSV является аббревиатурой наименования «Comma-Separated Values» , что переводится на русский язык, как «значения, разделенные запятыми». Действительно, в этих файлах в качестве разделителей выступают запятые, хотя в русскоязычных версиях, в отличие от англоязычных, все-таки принято применять точку с запятой.

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

Способ 1: Обычное открытие файла

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

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


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

Способ 2: использование Мастера текстов

Импортировать данные из документа формата CSV можно при помощи встроенного инструмента Excel, который называется Мастер текстов .


Способ 3: открытие через вкладку «Файл»

Существует также способ открыть документ CSV через вкладку «Файл» программы Excel.


Как видим, несмотря на некоторые проблемы с открытием документов формата CSV в Экселе, решить их все-таки можно. Для этого нужно воспользоваться встроенным инструментом Excel, который называется Мастер текстов . Хотя, для многих случаев вполне достаточно и применения стандартного метода открытия файла двойным щелчком левой кнопки мыши по его наименованию.

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

История этого формата насчитывает не менее 30 лет. Но даже сейчас, в эпоху повального использования XML, для выгрузки и загрузки больших объемов данных по-прежнему используют CSV. И, несмотря на то, что сам формат довольно неплохо описан в RFC, каждый его понимает по-своему.

В этой статье я попробую обобщить существующие знания об этом формате, указать на типичные ошибки, а также проиллюстрировать описанные проблемы на примере кривой реализации импорта-экспорта в Microsoft Office 2007. Также покажу, как обходить эти проблемы (в т.ч. автоматическое преобразование типов Excel-ом в DATETIME и NUMBER) при открытии.csv.

Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться.

Как иллюстрацию возьмем казалось бы тривиальную задачу: импортировать в Microsoft Outlook данные из таблицы в Microsoft Excel.

В Microsoft Excel есть средства экспорта в CSV, а в Microsoft Outlook — соответствующие средства импорта. Что могло быть проще — сделал файлик, «скормил» почтовой программе и — дело сделано? Как бы не так.

Создадим в Excel тестовую табличку:

… и попробуем экспортировать ее в три текстовых формата:

Какой вывод мы делаем из этого?.. То, что здесь Microsoft называет «CSV (разделители — запятые)», на самом деле является форматом с разделителями «точка с запятой». Формат у Microsoft — строго Windows-1251. Поэтому, если у вас в Excel есть Unicode-символы, они на выходе в CSV отобразятся в вопросительные знаки. Также то, что переводами строк является всегда пара символов, то, что Microsoft тупо берет в кавычки все, где видит точку с запятой. Также то, что если у вас нет Unicode-символов вообще, то можно сэкономить на объеме файла. Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.

Теперь посмотрим, как на это смотрит Outlook. Попробуем импортировать эти файлы из него, указав такие же источники данных. Outlook 2007: Файл -> Импорт и экспорт… -> Импорт из другой программы или файла. Далее выбираем формат данных: «Значения, разделенные запятыми (Windows)» и «Значения, разделенные табуляцией (Windows)».

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

Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.

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

Стандарта CSV как такового, к сожалению, нет, но, между тем, существует т.н. memo. Это RFC 4180 2005-го года, в котором описано все довольно толково. За неимением ничего большего, правильно придерживаться хотя бы RFC. Но для совместимости с Excel следует учесть его собенности.

  • между строками — перевод строки CRLF [на мой взгляд, им не стоило ограничивать двумя байтами, т.е. как CRLF (0×0D, 0×0A), так и CR 0×0D]
  • разделители — запятые, в конце строки не должно быть запятой,
  • в последней строке CRLF не обязателен,
  • первая строка может быть строкой заголовка (никак не помечается при этом)
  • пробелы, окружающие запятую-разделитель, игнорируются.
  • если значение содержит в себе CRLF, CR, LF (символы-разделители строк), двойную кавычку или запятую (символ-разделитель полей), то заключение значения в кавычки обязательно. В противном случае - допустимо.
  • т.е. допустимы переводы строк внутри поля. Но такие значения полей должны быть обязательно закавычены,
  • если внутри закавыченной части встречаются двойные кавычки, то используется специфический квотинг кавычек в CSV — их дублирование.

Вот в нотации ABNF описание формата:

File = record *(CRLF record) header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C DQUOTE = %x22 LF = %x0A CRLF = CR LF TEXTDATA = %x20-21 / %x23-2B / %x2D-7E

Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:

  • строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
  • количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
  • Квотить кавычки через «слэш» не по стандарту, делать так не надо.
  • Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
  • Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
  • Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
  • У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.

Пример валидного CSV, который можно использовать для тестов:

Фамилия, Имя, Адрес, Город/штат, индекс, просто строка Иванов,Иван, Ленина 20, Москва, 08075, "1/3" Tyler, John,110 terrace, PA,20121, "1.24" "Петров ""Кул""", Петя,120 Hambling St., NJ,08075, "1,24" Смирнов,Вася,"7452 Street ""Near the Square"" road", York, 91234, "3-01" ,Миша,Ленинград, 00123, "03-01" "Джон ""Черная голова"", Клод",Рок,"", Маями бич,00111, "0000" Сергей,

Точно такой же SCSV:

Фамилия; Имя; Адрес; Город/штат; индекс; просто строка Иванов;Иван; Ленина 20; Москва; 08075;"1/3" Tyler; John;110 terrace; PA; 20121;"1.24" "Петров ""Кул"""; Петя;120 Hambling St.; NJ;08075;"1,24" Смирнов;Вася;"7452 Street ""Near the Square"" road"; York; 91234;"3-01" ;Миша;;Ленинград; 00123;"03-01" "Джон ""Черная голова""; Клод";Рок;""; Маями бич;00111; "0000" Сергей;;

Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в.csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

Ошибки Excel-я при импорте:

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

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

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.

Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.

Фамилия;Имя;Адрес;Город/штат;индекс;просто строка Иванов;Иван;Ленина 20;Москва;="08075";="1/3" Tyler; John;110 terrace;PA;="20121";="1.24" "Петров ""Кул""";Петя;120 Hambling St.;NJ;="08075";="1,24" Смирнов;Вася;"7452 Street ""Near the Square"" road";York;="91234";="3-01" ;Миша;;Ленинград;="00123";="03-01" "Джон ""Черная голова"";Клод";Рок;"";Маями бич;="00111";="0000" Сергей;;

И вот что случаеся, если мы открываем этот файлик в экселе:

Резюмирую.

Чтобы сгенерировать такой CSV, которым можно было бы пользоваться, пользователю нужно дать возможность сделать следующие настройки перед экспортом:

  1. выбрать кодировку . Как правило, важно UTF-8, UTF-16, Windows-1251, KOI8-R. Чаще всего, других вариантов нет. Одна из них должна идти по умолчанию. В случае, если данные содержат символы, не имеющие аналогов в целевой кодировке, нужно предупреждать пользователя, что данные будут битые;
  2. выбрать разделитель между полями . Варианты — табуляция, запятая, точка с запятой. По умолчанию — точка с запятой. Не забыть, что если разделитель вводится в тексте, то будет очень непросто ввести туда табуляцию, это еще и непечатный символ;
  3. выбрать разделитель между строками (CRLF 0×0D 0×0A или CR 0×0D);
  4. выбрать разделитель целой и дробной части для числовых данных (точка или запятая).
  5. выбрать, выводить ли строку заголовка;
  6. выбрать, каким образом осуществлять квотинг спецсимволов (особенно переводов строк и кавычек). В принципе, можно отступиться от стандарта и квотировать их как \n и \", но нужно в этом случае не забыть квотировать сами \n, если они встретятся и не забыть сделать это опцией при экспорте-импорте. Но совместимость пойдет лесом, потому что любой RFC-стандартный парсер конструкцию...,"abc\«",… посчитает за ошибку;
  7. совсем в идеале — поставить галочку «для Excel» и учитывать там те нестандартности, которые внесла Майкрософт . К примеру, заменять значения числовых полей, «похожих на дату», на конструкцию ="<значение поля>«.
  8. определиться, нужно ли оставлять «хвост» из пустых разделителей , если он образуется. Например, из 20 полей только первое содержит данные, а остальные пустые. В итоге, в строке можно либо ставить после первого 19 разделителей, либо не ставить. Для больших объемов данных это может спасти миллисекунды обработки и уменьшить размер файла.

Чтобы построить хороший и удобный импортер CSV, необходимо помнить о следующем:

  1. разбор файла нужно делать по лексемам в соответствии с грамматикой выше или пользоваться хорошо зарекомендовавшими себя готовыми библиотеками (Excel работает иначе, потому с импортом проблема);
  2. предоставлять пользователю возможность выбрать кодировку (топ 4 достаточно);
  3. предоставлять пользователю возможность выбрать разделитель между полями (запятая, табуляция, точка с запятой достаточно);
  4. предоставлять пользователю возможность выбрать разделитель между строками , но кроме вариантов CR и CRLF нужно предусмотреть «CR или CRLF». Это связано с тем, что, например, Excel при экспорте таблицы с переводами строк внутри ячеек экспортирует эти переводы строк как CR, а остальные строки разделяет CRLF. При этом при импорте файла ему все равно, CR там или CRLF;
  5. предоставлять пользователю возможность выбрать разделитель между целой и дробной частей (запятая или точка);
  6. определиться с методом разбора — сначала читаем все в память, потом обрабатываем или обрабатываем строку за строкой. В первом случае может понадобиться больше памяти, во втором случае — ошибка в середине вызовет только частичный импорт, что может вызвать проблемы. Предпочительнее первый вариант.

Рауф Алиев,
заместитель технического директора Mail.Ru Group

error: Content is protected !!