api documentation | http://mcarpenter.org/rdoc/csvobj/index.html |
---|---|
github home | http://github.com/mcarpenter/csvobj |
repository URLs |
https://github.com/mcarpenter/csvobj.git git://github.com/mcarpenter/csvobj.git |
page last updated | 2010-11-29 22:57 +01:00 |
CSVobj has two simple aims in the processing of CSV files:
It achieves these aims by automatically instantiating a class with dynamic attributes that can be used to refer to each column of the CSV by name. Each attribute name is derived in a predictable fashion from the column headers (the first row of the CSV).
Rather than referring programatically to the "third element of the
row" (row[2]
) one can simply say row.last_name
.
Any change to the CSV format (eg by inserting a new column between
two existing columns) will not require a program change: you do not need
to hunt down all references to row[2]
and make them
row[3]
; they remain row.last_name
.
Given the following CSV file:
First Name,Last Name Cheryl,James Sandra,Denton Deidra,Roper
we can extract just the last names as follows:
# Get the gem require 'rubygems' require 'csvobj' # Subclass because #parse defines methods on the class class MyCsv < CSVobj ; end # First command line argument is CSV file to read csv_file = File.new( ARGV[0] ) # Parse the file, print the "last name" column of each row MyCsv.parse(csv_file).each do |row| puts row.last_name end