Project

General

Profile

Actions

Bug #10013

closed

[CSV] Yielding all elements from a row

Added by Gat (Dawid Janczak) almost 10 years ago. Updated about 6 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-07-06 trunk 46722) [x86_64-linux]
[ruby-core:63582]

Description

Let's say I have the following CSV file:
col1,col2,col3
1,2,3
4,5,6
(...)

I want to iterate over values yielding them to a block. I can do that like this:
CSV.foreach('file.csv') { |col1, col2, col3| print col2 + " " } # => "col2 2 5"
This works fine, but I would like to skip the headers:
CSV.foreach('file.csv', headers: true) { |col1, col2, col3| print col2 + " " } # => NoMethodError

CSV yields rows as arrays if headers option is not specified and destructuring works fine.
When headers option is specified however, CSV::Row objects are yielded instead and destructuring fails.

It would be nice to have both scenarios working in the same manner, but I don't know how to approach this. Calling to_a on yielded row (https://github.com/ruby/ruby/blob/trunk/lib/csv.rb#L1731) worked, but obviously this would break when people actually expect CSV::Row instance. Any ideas?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0