Feature request: Array.to_h (2nd part!)

Hit post by accident! The full final example:

header_row = "year,month,day,price\n"
index_of = header_row.chomp.split(’,’).to_h.invert

=> {“month”=>1, “price”=>3, “day”=>2, “year”=>0}

data_row = "2002,1,17,1.5\n"
cells = data_row.chomp.split(’,’)
cells[index_of[‘year’]]

=> “2002”

Cheers,

Tom

Hit post by accident! The full final example:

header_row = “year,month,day,price\n”
index_of = header_row.chomp.split(‘,’).to_h.invert

=>> {“month”=>1, “price”=>3, “day”=>2, “year”=>0}

data_row = “2002,1,17,1.5\n”
cells = data_row.chomp.split(‘,’)
cells[index_of[‘year’]]

=>> “2002”

Isn’t there a CSV processing library available? I imagine an API
would provide hash-like access:

data = CSV.new(filename)
data.each do |record|
# access record[:year], etc.
end

Your example is, well, clever, but a bit hard to follow.

Gavin

···

On Friday, January 17, 2003, 10:25:38 PM, Tom wrote:

Hi, Gavin,

From: “Gavin Sinclair” gsinclair@soyabean.com.au
Sent: Friday, January 17, 2003 9:03 PM

Isn’t there a CSV processing library available? I imagine an API
would provide hash-like access:

data = CSV.new(filename)
data.each do |record|
# access record[:year], etc.
end

There is a csv processing module here:
http://www.ruby-lang.org/raa/list.rhtml?name=csv
But it doesn’t do anything special treatment about
“the first line as column header.” You must write like below now.

require ‘csv’
year = 5
CSV.open(filename, “r”) do |record|
p record[year]
end

Regards,
// NaHi

Hi,

Isn’t there a CSV processing library available? I imagine an API
would provide hash-like access:

data = CSV.new(filename)
data.each do |record|
# access record[:year], etc.
end

There is a csv processing module here:
http://www.ruby-lang.org/raa/list.rhtml?name=csv
But it doesn’t do anything special treatment about
“the first line as column header.” You must write like below now.

If it is possible to override Row definition in particular
subclass/instance, you could write like this.

require ‘csv’

csv = CSV.open(filename, “r”)
(csv.row_class = Class.new(CSV::Row)).class_eval do
csv.shift.each_with_index do |name, idx|
define_method(name) {at(idx)}
# class_eval(“def #{name} at(#{idx})”)
end
end
csv.each do |record|
p record.year
end

···

At Thu, 23 Jan 2003 19:43:33 +0900, NAKAMURA, Hiroshi nahi@keynauts.com wrote:


Nobu Nakada

Kon’nichiwa, nakada-san,

From: “Nobuyoshi Nakada” nobu.nokada@softhome.net
Sent: Thursday, January 23, 2003 9:43 PM

Isn’t there a CSV processing library available? I imagine an API
would provide hash-like access:

data = CSV.new(filename)
data.each do |record|
# access record[:year], etc.
end

There is a csv processing module here:
http://www.ruby-lang.org/raa/list.rhtml?name=csv
But it doesn’t do anything special treatment about
“the first line as column header.” You must write like below now.

If it is possible to override Row definition in particular
subclass/instance, you could write like this.
[snipped cool snippet]

(He admires) You know everything about Ruby and do anything
you want.

For a person who is not as great as you, like me, I may
add such a function to csv module.

Regards,
// NaHi