Treating CSV files like tables in Ruby
January 12, 2012 4:07 pm

Want to do some quick-and-dirty work in irb on data in CSV format? With the arrayfields gem, you can access array fields by name. I’ve mixed in some code to the CSV library to use the header row to provide fields for arrayfields, e.g.:

employees.csv
1 id First Name Last Name Username
2 1 Andrew Filer afiler
3 2 Ulysses Sername username
irb> require "csvtables"
irb> t = CSV::table('employees.csv')
irb> t.first.last_name
=> "Filer"

The code:

require 'arrayfields'
require 'csv'

class CSV
	def self.table(filename, mode='r')
		open(filename, mode).to_table
	end
end

class CSV::Reader
	def to_table
		struct = Array.struct self.first.map { |v| v.downcase.gsub(/\s/, '_').to_sym }
		self.map { |row| struct.new row }
	end
end
Lonetree, North Dakota
November 27, 2011 6:10 pm


Lonetree, North Dakota, originally uploaded by afiler.



Fort Rice, North Dakota, originally uploaded by afiler.

Ryder, North Dakota
November 24, 2011 10:47 pm


Ryder, North Dakota, originally uploaded by afiler.



Benedict, North Dakota, originally uploaded by afiler.



Ruso, North Dakota, originally uploaded by afiler.



Butte, North Dakota, originally uploaded by afiler.



Kief, North Dakota, originally uploaded by afiler.



Voltaire, North Dakota, originally uploaded by afiler.



Verendrye, North Dakota, originally uploaded by afiler.