Nice!  That's great Brian, I love it.  A quick
fix to the code I posted previously makes use of
this class.  My class extends OpenStruct, and no longer
has an @attributes attribute, or a method_missing
method.

Thanks!


#!/usr/bin/ruby

require 'csv'
require 'ostruct'

class ObjectCsvParser < OpenStruct
    def initialize(fields,values)
        super Hash[
            *[
                (0..fields.length-1).map {
                    |i| [fields[i], values[i]]
                }
            ].flatten
        ]

    end

    def self.each_record(fn,&block)
        fields = nil
        CSV.open(fn,'r') do |line|
            if(fields == nil)
                fields = line.map { |l| l.downcase.to_sym }
                next
            end

            yield ObjectCsvParser.new(fields,line)
        end
    end
end

# Assuming your CSV has last, first, and email as  fields
ObjectCsvParser.each_record(ARGV.shift) do |record|
    puts "Last: " + record.last
    puts "First: " + record.first
    puts "Email: " + record.email
end


Brian Candler wrote:
> On Thu, Mar 29, 2007 at 03:47:04AM +0900, Andrew Libby wrote:
>> At the end of the day, it's a hash cloaked in object clothing.
> 
> Perhaps you want Struct or OpenStruct (both in the standard install; for the
> latter you will need to require 'ostruct.rb')
> 
> From /usr/lib/ruby/1.8/ostruct.rb:
> 
> # OpenStruct allows you to create data objects and set arbitrary attributes.
> # For example:
> #
> #   require 'ostruct'
> #
> #   record = OpenStruct.new
> #   record.name    = "John Smith"
> #   record.age     = 70
> #   record.pension = 300
> #
> #   puts record.name     # -> "John Smith"
> #   puts record.address  # -> nil
> #
> # It is like a hash with a different way to access the data.  In fact, it is
> # implemented with a hash, and you can initialize it with one.
> #
> #   hash = { "country" => "Australia", :population => 20_000_000 }
> #   data = OpenStruct.new(hash)
> #
> #   p data        # -> <OpenStruct country="Australia" population=20000000>
> 

-- 
Andrew Libby
Tangeis, LLC
Innovative IT Management Solutions
alibby / tangeis.com