2015-04-17 75 views
1

我尝试了几乎所有的东西,但是我感觉很不自在。ruby​​ hash.values无法使用内置方法

我有一个CSV和阅读从中行:

CSV.foreach(file, quote_char: '"', col_sep: ',', row_sep: :auto, headers: true) { |line| 

    newLine = [] 
    newLine = line.values #undefined method .values 
    ... 
} 

线aparently哈希,因为线[“列名”]工作正常,也line.to_a返回[“关口”,“值“,”col2“,”value2“,...]

请帮忙,谢谢!

+0

什么是'line.class'?另外'line.inspect'。 –

+0

line.class是CSV :: Row,line.inspect是这样开始的:#

+0

所以,不是'Hash'。这使问题变得无效,对吗? –

回答

0

这不是一个普通的哈希,它是CSV ::行的一个实例,看here的API

正如您在以下代码的结果中看到的那样,方法值不存在。你使用line ['column_name']的解决方案很好。 您可以使用不带参数的方法字段获取所有字段。

CSV.parse(DATA, :col_sep => ",", :headers => true).each do |row| 
    puts row.class 
    puts row.methods - Object.methods 
end 

__END__ 
kId,kName,kURL 
1,Google UK,http://google.co.uk 
2,Yahoo UK,http://yahoo.co.uk 
0

这是一个CSV行,它是零件阵列和零件散列,并且没有.values方法可用。先使用.to_hash,然后你就可以使用.values。 (请注意,这将删除字段顺序和任何重复字段)

newLine = line.to_hash.values