Как переформатировать файл CSV, чтобы он соответствовал правильному формату CSV - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть веб-приложение, которое анализирует загруженные пользователем CSV-файлы.

Некоторые пользователи загружают CSV-файлы, которые не соответствуют надлежащему формату CSV, указанному здесь

Например:

abc,hello mahmoud,this is" description, bad

Это должно быть

abc,hello mahmoud,"this is"" description", bad

Когда я использовал библиотеку ruby ​​ fastcsv для анализа неправильного csv, не удается . Однако, успех , когда я открываю файл excel или openoffice .

Есть ли какая-нибудь библиотека ruby, которая может переформатировать текст в формате csv, чтобы поместить его в правильный формат?

1 Ответ

2 голосов
/ 05 февраля 2012

Из документов :

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

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

data.split (",")

Это даст вам массив.Если вам действительно нужен действительный CSV (например, потому что вы спасли MalformedCSVError), то есть ... быстрее CSV!

require 'csv'
str= %q{abc,hello mahmoud,this is" description, bad}
puts str.split(',').to_csv 
#=> abc,hello mahmoud,"this is"" description", bad
...