ヘッダ行つきCSV(とかTSV)を簡単に扱うライブラリを作った
Excelにて元データを作って、その元データを使って色々するツールをよく書くのだけども
ExcelVBAはめんどいし、かといってrubyを使ってExcelデータを扱うのもめんどい。
よくやるのはシートをコピーしてメモ帳に貼り付けてTSVにしてからrubyに食わせる方法だけども
各行をsplit(/\t/)で分割するだけだと、どの列にどのデータが入っているのかがよくわからなくなる。
そこでscsv(Simple CSV)というライブラリを作ってみた。
インストール
gem install gemcutter gem install scsv
基本の使い方
a.csv
名前,フリガナ,性別 佐藤,サトウ,男 田中,タナカ,女
a.rb
require "scsv" SCSV.parse("a.csv") do |row| p row end #=> {"名前" => "佐藤", "フリガナ" => "サトウ", "性別" => "男"} #=> {"名前" => "田中", "フリガナ" => "タナカ", "性別" => "女"} p SCSV.parse("a.csv") #=> [{"名前" => "佐藤", "フリガナ" => "サトウ", "性別" => "男"}, {"名前" => "田中", "フリガナ" => "タナカ", "性別" => "女"}]
オプション
SCSV.parseメソッドにはオプションを渡せます。
:header ヘッダを指定します。
- true ... ファイルの1行目をヘッダとみなします。
- 配列 ... その配列をヘッダとみなします。
- false ... ヘッダを使用しません。(ハッシュではなく、配列を返します)
デフォルトはtrueです。
SCSV.parse("a.txt", {:header => ["a", "b", "c"]}) #=> [{"a" => "名前", "b" => "フリガナ", "c" => "性別"}, {"a" => "佐藤", "b" => "サトウ", "c" => "男"}, {"a" => "田中", "b" => "タナカ", "c" => "女"}] SCSV.parse("a.txt", {:header => false}) #=> [["名前", "フリガナ", "性別"], ["佐藤", "サトウ", "男"], ["田中", "タナカ", "女"]]
:col_sep 列の区切り文字を指定します。
デフォルトは","です。
デフォルトが"\t"であるSTSVクラスも使えます。
むしろExcel使い的にはSTSVクラスのほうが使用頻度が高いかと。
a.tsv
名前\tフリガナ\t性別 佐藤\tサトウ\t男 田中\tタナカ\t女
a.rb
require "scsv" STSV.parse("a.tsv") do |row| p row end #=> {"名前" => "佐藤", "フリガナ" => "サトウ", "性別" => "男"} #=> {"名前" => "田中", "フリガナ" => "タナカ", "性別" => "女"} p STSV.parse("a.tsv") #=> [{"名前" => "佐藤", "フリガナ" => "サトウ", "性別" => "男"}, {"名前" => "田中", "フリガナ" => "タナカ", "性別" => "女"}]
制限事項など
クオートは考慮しません。