Создание файла CSV со специальными символами в полях - PullRequest
0 голосов
/ 27 октября 2011

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

"d1"|"d2"|"d3"|"d4"

, где d1, d2, d3, d4 - исходные строки, которые я хочу поместить в каждую ячейку.У меня следующие проблемы:

  1. |может содержаться в данных.Это действительно проблема?Может быть, не потому, что у меня есть двойные кавычки вокруг строк.Может быть, я мог бы даже использовать запятые, и это не имело бы значения.
  2. "сам может содержаться в данных. Должен ли я избежать этого каким-либо образом? Мое текущее решение состоит в том, чтобы удалить начальные и конечные двойные кавычки изисходная строка перед тем, как поместить вокруг нее мои двойные кавычки. Кажется, это работает, но я думаю, что избежать внутренних двойных кавычек было бы чище. Знаете ли вы, как это сделать?
  3. Данные также могут содержать символы новой строки. Я бы хотел, чтобы Excel держал данные вместе в одной ячейке и форматировал текст в этой ячейке в соответствии с символами новой строки. На данный момент это не так: Excel интерпретирует символы новой строки как завершающиеЗаписать и добавить дополнительные строки в импортированную таблицу.

Есть ли у вас какие-либо идеи, как исправить вышеуказанные проблемы? Есть ли онлайн-документация по этим конкретным проблемам? Я искал со вчерашнего дня, но не нашелчто-нибудь.

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Excel поддерживает новые строки в значениях. Например, используя пользовательский интерфейс Excel, вы можете ввести "foo\n\bar\nbaz" в ячейку, набрав Alt-Enter для каждого перевода строки.

Хитрость в Excel заключается в том, что в локалях, где запятая используется в качестве десятичной точки, Excel использует двоеточие в качестве разделителя полей. Не существует универсального / международного формата, который читал бы любой Excel.

Я был бы очень удивлен, если бы в Java не было пакета для чтения / записи файлов CSV. Python имеет один , который позволяет указывать разделитель, символ кавычки, разделитель записей и т. Д. Как на входе, так и на выходе.

Однако, если вы хотите написать свой собственный, следуйте этому псевдокоду для каждой строки, которую вы хотите написать:

for each field in the row:
    if field contains quotechar:
        double all quotechars in field
        field = quotechar + field + quotechar
    else if field contains delimiter, CR, or LF:
        field = quotechar + field + quotechar
    else:
        avoid waste of space and ugly visual impact by NOT doing unneeded quoting
join field strings separated by delimiter
append CR LF 
write the row string using binary mode (so Windows runtime doesn't give you 2xCR)

Обратите внимание: (1) все вышеперечисленное основано на 8-битных символах (2) Я избегал использования неоднозначного термина «новая строка».

1 голос
/ 27 октября 2011

Я считаю, что CSV лучше всего делать с разделением запятыми и заключением в кавычки значений, чтобы запятые в значениях не интерпретировались неправильно.Кавычки заключаются в двойные кавычки.Итак, следующие четыре значения:

one
two
three with "quoted" value
four

становится:

one,two,"three with ""quoted"" value",four

Я не верю, что стандартные реализации CSV могут поддерживать переводы строк в значениях;особенно не в Excel.Попробуйте создать ячейку в Excel с символами новой строки (это вообще возможно?) И сохранить как CSV, чтобы увидеть, работает ли это.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...