CSVファイルは、一言で言えばカンマ区切りの形式を持つファイルである。Excelなどの表計算ソフトで開いたり、編集したりできるが、分かりやすい構造なので、普通のテキストエディタでも編集できる。ログを記録するのにも便利。
RubyにはCSVファイルを扱うためのモジュールが用意されている。
それは、スクリプトの最初に、
require 'csv'
と書くことで使用することができる。
どんなことができるのか。
まずは、テキストエディタに次のように打ち込もう。
ルーミア,かわいい,かっこいい,りりしい,食欲 チルノ,向こう見ず,かわいい,氷
これをdata.csvという名前で保存しよう。違う名前にした場合は、次からのソースコードを適宜読み替えればよい。
まずは、普通に読み込もう。
#! ruby require 'csv' CSV.foreach("bo.csv") do |bo| print bo , "\n" end
実行結果
["ルーミア","かわいい","かっこいい","りりしい","食欲"] ["チルノ","向こう見ず","かわいい","氷"]
変数boには一行分のデータが配列形式で格納される。それを一行ずつ出力する。each文のようになっているのである。
ということは、さらにeach文を入れ子にして、
#! ruby require 'csv' CSV.foreach("data.csv") do |bo| bo.each do |mo| puts mo end end
としてやれば、
ルーミア かわいい かっこいい りりしい 食欲 チルノ 向こう見ず かわいい 氷
と、要素を一つずつ取り出すことができる。
もちろん、CSVファイルに書き込むこともできる。
#! ruby require 'csv' data = [ ["ルーミア","かわいい","ちょおかわいい"], ["チルノ","かわいい","むっちょかわいい"] ] CSV.open("bo.csv","wb") do |csv| data.each do |bo| csv << bo end end
実行結果
ファイル bo.csv ができている。内容は、
ルーミア,かわいい,ちょおかわいい チルノ,かわいい,むっちょかわいい
配列の中に配列? これは、二次配列と言う。たぶん。こうしてやると、bo.csvに複数行書き込むことができる。
カンマで区切られた文字列を配列にする機能もある。ありがたい。
#! ruby require 'csv' bo = "a,b,c,d,e" print CSV.parse_line(bo)
実行結果
["a","b","c","d","e"]
ところで、CSVはカンマ区切りと言った。では、
["ルーミア",",","ちょおかわいい"]
という配列を定義して、同じように書き込んだとき、CSVファイルの中身はどうなるのか?
ルーミア,,,ちょおかわいい
になりかねないが、これではおかしい。
心配無用。カンマの文字をダブルクォートしてくれるので、形式は保持される。
では、ダブルクォーテーションは? これも、ダブルクォーテーションをダブルクォートしてくれるので、心配ない。ややこしいが、要するに大丈夫。
基礎の基礎が怖いとマドンナも仰った。要はぼくもよく分かっていない。これ以降のことはるりま(Rubyリファレンスマニュアル)の該当ページを参照されたし。