Table
TableはDBの表をイメージするとよい。
Rowの配列を保持している。
Row
RowはDBの行をイメージするとよい。
Fieldの配列を保持している。
Row[ヘッダー名のシンボル]の形式でカラムの値を取得出来る。
Field
FieldはDBのカラムをイメージすると良い。
Fieldは要素2の配列で、最初の要素にヘッダー・次の要素に実際の値を保持している。
サンプルコード
# encoding: utf-8 require 'csv' require 'tbpgr_utils' table = CSV.table "sample.csv" bulk_puts_eval binding, <<-EOS table.class table.headers EOS table.each do |row| bulk_puts_eval binding, <<-EOS row row.class row[:header1] row[:header2] row[:header3] EOS end table.each do |row| row.each do |field| bulk_puts_eval binding, <<-EOS field.first field.last EOS end end __END__ 下記はTbpgrUtils gemの機能 bulk_puts_eval https://rubygems.org/gems/tbpgr_utils https://github.com/tbpgr/tbpgr_utils
読み込みCSV
※あえて、カラムが改行やカンマを保持しているCSVを利用
header1,header2,header3 "column1_1","column1_2","column1_3" "column2_1","column2_2 multi line data","column2_3" "column3_1","column3_2","column3_3 , contain comma"
出力
table.class # => CSV::Table table.headers # => [:header1, :header2, :header3] row # => #<CSV::Row header1:"column1_1" header2:"column1_2" header3:"column1_3"> row.class # => CSV::Row row[:header1] # => "column1_1" row[:header2] # => "column1_2" row[:header3] # => "column1_3" row # => #<CSV::Row header1:"column2_1" header2:"column2_2\r\nmulti line data" header3:"column2_3"> row.class # => CSV::Row row[:header1] # => "column2_1" row[:header2] # => "column2_2\r\nmulti line data" row[:header3] # => "column2_3" row # => #<CSV::Row header1:"column3_1" header2:"column3_2" header3:"column3_3 , contain comma"> row.class # => CSV::Row row[:header1] # => "column3_1" row[:header2] # => "column3_2" row[:header3] # => "column3_3 , contain comma" field.first # => :header1 field.last # => "column1_1" field.first # => :header2 field.last # => "column1_2" field.first # => :header3 field.last # => "column1_3" field.first # => :header1 field.last # => "column2_1" field.first # => :header2 field.last # => "column2_2\r\nmulti line data" field.first # => :header3 field.last # => "column2_3" field.first # => :header1 field.last # => "column3_1" field.first # => :header2 field.last # => "column3_2" field.first # => :header3 field.last # => "column3_3 , contain comma"