Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Structを使ってCSVの情報を取り込んでみる

概要

Structを使ってCSVの情報を取り込んでみる

詳細

Structを使ってCSVの情報を取り込んでみます

仕様

CSVの1行目はヘッダー
CSVの2行目以降は実データ

サンプルコード

# encoding: utf-8

CSV =<<EOS
column1, column2, column3
data1_1, data1_2, data1_3
data2_1, data2_2, data2_3
data3_1, data3_2, data3_3
EOS

csv_list = CSV.each_line.to_a
csv_header = csv_list.first
csv_datas = csv_list[1..-1]

SampleCsv = eval "Struct.new #{csv_header.chop.gsub('column', ':column')}"
sample_csv_list = []
csv_datas.each do |raw_data|
  normalize_data = raw_data.chop.split(',').map{|v|"'#{v}'"}.join(',')
  csv_record = eval "SampleCsv.new #{normalize_data}"
  sample_csv_list << csv_record
end

p sample_csv_list

sample_csv_list.each_with_index do |value, index|
  puts "#{index}:#{value.column1}, #{value.column2}, #{value.column3}"
end

出力

[#<struct SampleCsv column1="data1_1", column2=" data1_2", column3=" data1_3">, #<struct SampleCsv column1="data2_1", column2=" data2_2", column3=" data2_3">, #<struct SampleCsv column1="data3_1", column2=" data3_2", column3=" data3_3">]
0:data1_1,  data1_2,  data1_3
1:data2_1,  data2_2,  data2_3
2:data3_1,  data3_2,  data3_3