今回はRubyでCSVファイルの読み込み・書き込みを行う方法を解説したいと思います。
Rubyには、CSVに対応するライブラリ「csv」が標準添付されているので、そのライブラリを使いCSVの読み込み・書き込みをする方法について解説します。
CSVファイルの読み込み
CSVファイルとは、ファイル形式の1つで、カンマ「,」で区切りでデータを記述したものです。今回は簡単なCSVファイルを用意しました。
1 2 3 |
1,milk,200 2,coke,300 3,coffee,250 |
このファイルを「data.csv」として保存します。
Ruby で CSV を扱うライブラリを require "csv"で読み込みます。
CSVファイルを1行ずつ読み込む
CSVファイルを1行ずつ取り出す場合は、以下のようにforeachメソッドを使います。
1 2 3 4 5 |
require "csv" CSV.foreach("path/to/data.csv") do |row| # 行に対する処理 p row end |
結果
1 2 3 |
["1", "milk", "200"] ["2", "coke", "300"] ["3", "coffee", "250"] |
CSVファイル全体を読み込む
次にreadメソッドを使って、CSVファイル全体を読み込みます。読み込んだデータは、配列に格納されます。
1 2 3 |
require "csv" data_list = CSV.read("path/to/data.csv") p data_list |
結果
1 |
[["1", "milk", "200"], ["2", "coke", "300"], ["3", "coffee", "250"]] |
さらに、mapメソッドを使って読み込み位置を指定することもできます。
|row| row[0,2]とした場合、 [0,2]は0番目のインデックスから2個分読み込むという命令になります。
以下の場合、各行の1-2列目が読み込まれます。
1 2 3 |
require "csv" data_list = CSV.read('path/to/data.csv').map{|row| row[0, 2]} p data_list |
結果
1 |
[["1", "milk"], ["2", "coke"], ["3", "coffee"]] |
CSVファイルの書き込み
次に、CSVファイルに書き込みをする方法について解説します。
CSVファイルの書き込みを行うために、読み込みと同じcsvライブラリのopenメソッドを使います。
1 2 3 4 5 6 |
require "csv" CSV.open('test.csv','w') do |test| test << ["A","B","C"] test << ["milk","coffee","water"] end |
実行すると以下の様なCSVファイルが生成されます。
1 2 |
A,B,C milk,coffee,water |
"CSV.open('test.csv','w')"の'w'で書き込みの命令を行っています。
'a'にすると追記モードになり、既存のデータに追記で書き込むことができます。
他にも以下の様な書き方ができます。
1 2 3 4 5 6 |
require "csv" test = CSV.open('test.csv','w') test.puts ["A","B","C"] test.puts ["milk","coffee","water"] test.close |
実行して生成されるCSVファイルは先程と同じものが生成されます。