2013-10-11 5 views
1

Как настроить мой файл, чтобы не вставлять заголовки в файл csv? Я попытался это:Возврат CSV-заголовков в Ruby

CSV.foreach(email_response_file, :col_sep => "\t", :return_headers => false) do |column| 
    .... 
end 

Однако, независимо от того, установлен ли я :return_headers к истинным или ложным, я по-прежнему тянуть в заголовках. Как я могу избавиться от них? Я предполагаю, что моя проблема - метод .foreach, который я использую.

ответ

3

:return_headers работает только в том случае, если :headers является true, но это не работает так, как вы думаете.

Если ваши данные CSV содержат строку заголовка, просто установите headers: true, и первая строка не будет возвращена как строка данных. Вместо этого он обрабатывается и позволяет получить доступ к полю по его заголовку (как хэш):

require 'csv' 

data=<<-eos 
id,name 
1,foo 
2,bar 
eos 

CSV.parse(data, headers: true) do |row| 
    puts "ID: " + row["id"] 
    puts "Name: " + row["name"] 
    puts "1st col: " + row[0] 
    puts "2nd col: " + row[1] 
    puts "---" 
end 

Выход:

ID: 1 
Name: foo 
1st col: 1 
2nd col: foo 
--- 
ID: 2 
Name: bar 
1st col: 2 
2nd col: bar 
--- 
+0

Великий - Это объясняет это прекрасно и решает эту проблему. Я определенно неправильно понимал, как работает функция ': return_headers'. Спасибо за совет. – Luigi

0

Я думаю, что вы хотите headers: false

И если это не удается, вы всегда можете пропустить первую строку (делает foreach возвращает итератор?)

CSV.foreach(file).each_with_index do |row, idx| 


end 

Кроме того, это просто семантика, но Еогеасп возвращает строка, не столбец

0

Вы также можете использовать CSV.table читать .csv файл в таблицу.

datatable = CSV.table("file path") 

и

puts datatable.headers() 
Смежные вопросы