概要
- rubyでcsvを読み書きする時、個人的によく使う書き方のメモ。
- HEADER_ARRAY に出力したいカラム名を書いて、 row_hash でカラム名をキーとしたハッシュを利用して出力する。
- 入力ファイル名は第1引数、出力ファイル名は第2引数。(省略した場合はそれぞれ、input.cscとouptput.csc)
コード
main.rb
require 'csv'
INPUTFILE = ARGV[0] || 'input.csv'
OUTPUTFILE = ARGV[1] || 'output.csv'
# ヘッダー
HEADER_ARRAY = [
:name, :address, :message
]
def get_header_ordered_array(row_hash)
row_array = []
HEADER_ARRAY.each do |col|
row_array.push(row_hash[col.to_sym])
end
row_array
end
CSV.open(OUTPUTFILE, 'w') do |csv|
csv << HEADER_ARRAY
row_hash = {}
CSV.foreach(INPUTFILE, headers: true) do |row|
# row_hash[:ヘッダーカラム名] = 出力
row_hash[:name] = 'カラム1' + row[0].to_s
row_hash[:address] = 'カラム2' + row[1].to_s
row_hash[:message] = 'カラム3' + row[2].to_s
csv << get_header_ordered_array(row_hash)
end
end
使い方
- 入力ファイル
input.csv
"id","kudamono","sakana"
1,"ringo","iwashi"
2,"mikan","sanma"
3,"banana","azi"
- 実行方法
$ ruby main.rb
- 出力ファイル
output.csv
name,address,message
カラム11,カラム2ringo,カラム3iwashi
カラム12,カラム2mikan,カラム3sanma
カラム13,カラム2banana,カラム3azi