RubyでCSVファイルの読み込み・書き込みをする

今回はRubyでCSVファイルの読み込み・書き込みを行う方法を解説したいと思います。 Rubyには、CSVに対応するライブラリ「csv」が標準添付されているので、そのライブラリを使いCSVの読み込み・書き込みをする方法について解説します。

CSVファイルの読み込み

CSVファイルとは、ファイル形式の1つで、カンマ「,」で区切りでデータを記述したものです。今回は簡単なCSVファイルを用意しました。
1,milk,200
2,coke,300
3,coffee,250
このファイルを「data.csv」として保存します。 Ruby で CSV を扱うライブラリをrequire "csv"で読み込みます。

CSVファイルを1行ずつ読み込む

CSVファイルを1行ずつ取り出す場合は、以下のようにforeachメソッドを使います。
require "csv"
CSV.foreach("path/to/data.csv") do |row|
    # 行に対する処理
    p row
end
結果
["1", "milk", "200"]
["2", "coke", "300"] 
["3", "coffee", "250"]

CSVファイル全体を読み込む

次にreadメソッドを使って、CSVファイル全体を読み込みます。読み込んだデータは、配列に格納されます。
require "csv"
data_list = CSV.read("path/to/data.csv")
p data_list
結果
[["1", "milk", "200"], ["2", "coke", "300"], ["3", "coffee", "250"]]
さらに、mapメソッドを使って読み込み位置を指定することもできます。 |row| row[0,2]とした場合、[0,2]は0番目のインデックスから2個分読み込むという命令になります。 以下の場合、各行の1-2列目が読み込まれます。
require "csv"
data_list = CSV.read('path/to/data.csv').map{|row| row[0, 2]}
p data_list
結果
[["1", "milk"], ["2", "coke"], ["3", "coffee"]]

CSVファイルの書き込み

次に、CSVファイルに書き込みをする方法について解説します。 CSVファイルの書き込みを行うために、読み込みと同じcsvライブラリのopenメソッドを使います。
require "csv"

CSV.open('test.csv','w') do |test|
 test << ["A","B","C"]
 test << ["milk","coffee","water"]
end
実行すると以下の様なCSVファイルが生成されます。
A,B,C
milk,coffee,water
"CSV.open('test.csv','w')"の'w'で書き込みの命令を行っています。 'a'にすると追記モードになり、既存のデータに追記で書き込むことができます。 他にも以下の様な書き方ができます。
require "csv"

test = CSV.open('test.csv','w')
    test.puts ["A","B","C"]
    test.puts ["milk","coffee","water"]
test.close
実行して生成されるCSVファイルは先程と同じものが生成されます。