2016-10-21 3 views
0

У меня есть строковые значения, которые я пишу в CSV-файл в виде массива, как -Запись в формате CSV добавляет кавычки

output = "This is a, ruby output" 
CSV.open("output/abc.csv", "a+") do |csv| 
    csv << [output] 
end 

Когда я просматриваю файл abc.csv строка добавляется имеет кавычки (") на начало и конец поля. Как я могу избавиться от него? выход

файла, как ---

"This is a, ruby output" 

до сих пор я пытался tr или slice перед сохранением в csv, но, похоже, письмо вызывает его.

+0

Это «действительно» CSV (хотя CSV формально не определены) и потенциально необходимые для обеспечения запятые внутри поля правильно понят любым читает вывод. Если вы просто хотите присоединиться к полям с запятыми, пропустите CSV-библиотеку и вместо этого используйте '[output] .join (',')'. – Owen

+0

Я не могу воспроизвести вашу проблему. Вывод кода «Это рубиновый вывод» без кавычек, как и должно быть. Он будет выводить кавычки, если для параметра «force_quotes» установлено значение true, но по умолчанию оно ложно, а ваш фрагмент не устанавливает его. Он будет выводить кавычки, если у вас есть кавычки или запятые в вашей строке, но у вас их нет. Короче, пожалуйста, проверьте свой пример снова; если нет, сообщите, с каким Ruby вы работаете, потому что что-то очень странно. – Amadan

+0

@Owen: Запись CSV вручную опасна и не рекомендуется. – Amadan

ответ

3

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

require 'csv' 
output = "This is a, ruby output" 
File.open("output/abc.csv", "a+") do |io| 
    csv = CSV.new(io, col_sep: '^') 
    csv << [output, "the end"] 
end 

Выход:

This is a, ruby output^the end 
+1

Спасибо за объяснение @ Owen. Кажется, я ерзал с бесполезной проблемой, но ваше объяснение разъясняет это. Узнал что-то новое. – Aniruddha