Чтение csv-файла с заголовками, заключенными в двойные кавычки

У меня есть файл .csv со строкой заголовка как

VM,Mac Address,Type,"IP Address"

С помощью следующего кода я могу распечатать значение VM, но не IP Address. Если удалить "", окружающий IP Address, он работает.

CSV.foreach(vcenter_vnetwork_file, headers: true, :quote_char => "\x00") do |row|
    puts row['VM']
    puts row['IP Address']
end

Я пробовал использовать puts row['\"IP Address\"'], но это не сработало. Я могу программно удалить эти "" из строки заголовка, но есть ли способ получить этот рабочий результат без какого-либо обходного пути? Я также пробовал добавить :force_quotes => true в цикл CSV.foreach.

0
0
851
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему вы выбрали :quote_char как "\x00"? Установите его на действительно цитата.

CSV.foreach('/tmp/qqq.csv', headers: true, :quote_char => '"') do |row|
  puts row['IP Address']
end

что означает "\x00"? выглядит как какой-то шестнадцатеричный код для какого-то символа. Можно ли установить 2 символа как quote_char ?

codec 11.04.2018 13:35

Вам никогда не понадобится "\x00". Это шестнадцатеричное обозначение терминатора c-строки, буквально имеющее код ASCII 0. Проблемы с ним возникнут гораздо раньше: CSV будет перестань читать на нем файл, поскольку он не использует двоичный режим при чтении файла.

Aleksei Matiushkin 11.04.2018 13:39

Другие вопросы по теме