LoginSignup
1
2

More than 5 years have passed since last update.

(個人メモ)rubyでcsvファイルを読み書きする時のテンプレート

Posted at

概要

  • 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
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2