On Jul 22, 2007, at 5:11 AM, Hu Ma wrote: > Hello James, Hello. > Thanks for the answer. Sure. > The code that you presented gave me some ideias, however I still don't > know the best way to overcome some problems: > - What is the best way to convert a column to boolean values? See below. > - The csv file can have a column that has both float and integer > values > in it. In this case I want to create a float column in the database. You can force the column to a float. See below. > - Is there a way to avoid the duplicating of information? The example > you gave shows the same classes twice. My example showed the classes for two rows of data. They had the same classes. Nothing was "duplicated" though. > To better ilustrate the problems here is one sample: > data = <<-END > string,number,boolean > James,32,true > Dana,33.21,false > END Here's how I would handle that data: #!/usr/bin/env ruby -wKU require "rubygems" require "faster_csv" data = <<-END string,number,boolean James,32,true Dana,33.21,false END BOOLS = {"true" => true, "false" => false} parsed = FCSV.parse( data, :headers => true, :header_converters => :symbol, :converters => [ lambda { |f, i| i.header == :number ? Float(f) : f }, lambda { |f, i| i.header == :boolean ? BOOLS[f] : f } ] ) p parsed.to_a # >> [[:string, :number, :boolean], ["James", 32.0, true], ["Dana", 33.21, false]] __END__ Hope that helps. James Edward Gray II