2013-10-11 72 views
1

如何將我的文件設置爲不拉入我的csv文件中的頭文件?我曾經嘗試這樣做:在Ruby中返回CSV頭文件

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

但是,無論我是否設置:return_headers爲真或假的我還是拉頭。我怎樣才能擺脫它們?我假設我的問題是我正在使用的.foreach方法。

回答

3

:return_headers只有在:headerstrue時纔有效,但它不會按照您認爲的方式工作。

如果您的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 

而且,這只是語義,但是的foreach返回行,而不是列

0

你也可以使用CSV.table閱讀該.csv文件放入表中。

datatable = CSV.table("file path") 

puts datatable.headers()