Я генерирую некоторый вывод CSV, используя встроенный CSV файл Ruby. Все работает нормально, но клиент хочет, чтобы поле имени на выходе содержало двойные кавычки, поэтому результат выглядит как входной файл. Например, ввод выглядит примерно так:
1,1.1.1.1,"Firstname Lastname",more,fields
2,2.2.2.2,"Firstname Lastname, Jr.",more,fields
Результат CSV, который является правильным, выглядит так:
1,1.1.1.1,Firstname Lastname,more,fields
2,2.2.2.2,"Firstname Lastname, Jr.",more,fields
Я знаю, что CSV делает все правильно, не дублируя третье поле только потому, что он имеет встроенные пробелы и обертывает поле двойными кавычками, когда он имеет встроенную запятую. То, что я хотел бы сделать, чтобы помочь клиенту чувствовать себя теплым и нечетким, говорит, что CSV всегда дублирует третье поле.
Я попробовал обернуть поле в двойных кавычках в моем методе to_a
, который создает поле "Firstname Lastname"
, передаваемое в CSV, но CSV смеялся над моей попыткой и выходом """Firstname Lastname"""
. Это правильная вещь, потому что она избегает двойных кавычек, так что это не сработало.
Затем я попытался установить CSV :force_quotes => true
в методе open
, который выводит двойные кавычки, обертывая все поля, как ожидалось, но клиенту это не понравилось, что я ожидал также. Таким образом, это тоже не сработало.
Я просмотрел документы Table и Row, и ничто не показывало мне доступ к методу "сгенерировать строковое поле" или к способу установки флага "для поля n всегда использовать кавычки".
Я собираюсь погрузиться в источник, чтобы увидеть, есть ли какие-то сверхсекретные твики, или если есть способ обезглавить CSV и сгинуть его, чтобы сделать мою волю, но задавался вопросом, есть ли у кого-то особые знания или перед этим пробегите.
И, да, я знаю, что могу свернуть свой собственный выход CSV, но я предпочитаю не изобретать проверенные колеса. И я также знаю о FasterCSV; Это теперь часть Ruby 1.9.2, которую я использую, поэтому явное использование FasterCSV не приносит мне ничего особенного. Кроме того, я не использую Rails и не собираюсь переписывать его в Rails, поэтому, если у вас нет симпатичного способа его реализации с использованием небольшого подмножества Rails, не беспокойтесь. Я буду рекомендовать любые рекомендации, чтобы использовать любой из этих способов только потому, что вы не потрудились прочитать это далеко.