On Jan 5, 2007, at 12:36 PM, Jon Egil Strand wrote: > > Greetings > > Do we have an object relational mapper for csv files? > > #data: > first_name;last_name;phone > peter;pan;12345 > > #ROW ACCESS > person.first_name => "peter" > person.last_name => "pan" First idea: #!/usr/bin/env ruby -w require "rubygems" require "faster_csv" require "ostruct" # load people = FCSV( DATA, :col_sep => ";", :headers => true, :header_converters => :symbol ) do |csv| csv.inject(Array.new) { |all, person| all + [OpenStruct.new (person.to_hash)] } end # example usage puts people.map { |person| person.first_name } __END__ First Name;Last Name;Phone Peter;Pan;111-1111 Wendy;Darling;222-2222 Second idea, if you are in control of the CSV data: #!/usr/bin/env ruby -w require "rubygems" require "faster_csv" require "pp" Person = Struct.new(:first_name, :last_name, :phone) people = [ %w[Peter Pan 111-1111], %w[Wendy Darling 222-2222] ].inject(Array.new) do |all, attrs| all + [Person.new(*attrs)] end # dump csv = FCSV.dump(people) puts csv puts # load reloaded = FCSV.load(csv) pp reloaded puts # use puts reloaded.map { |person| person.first_name } Hope one of those helps. James Edward Gray II