2015-04-17 12 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 хэш, потому что линия [ 'column_name'] работает отлично, а также line.to_a возвращается [ "значение "Col" "," col2 "," value2 ", ...]

, пожалуйста, помогите, спасибо!

+0

Что такое 'line.class'? Также 'line.inspect'. –

+0

line.class - CSV :: Row, line.inspect запускается следующим образом: #

+0

Итак, не 'Hash'. Что делает вопрос недействительным, не так ли? –

ответ

0

Это не обычный хэш, он является экземпляром CSV :: Row см here для API

Как видно из приведенного ниже кода, значения метода отсутствуют. Ваше решение использовать строку ['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 
Смежные вопросы