csvのパース

普段雑務でcsvの各値を集計したり計算したりするっていうのを
定常的に行っているのでrubyでスクリプト化してみた。

書いてみた

こんな感じでcsvファイルを順に読込み
カンマでsplitして、ダブルクォーテションをsubで置換して、と。

Dir.glob("*.csv") do |file_name|
(一部略)
  file = open(file_name, "r")
  file.gets
  file.each do |f|
    vals = f.split(',')
    f1 += vals[1].sub(/^\"/,"").sub(/\"$/,"").to_f
(一部略)

csvパーサーが付いていた

どうも、sub置換とか面倒なのでパーサーって無いのかと調べたら
標準であった。
簡単やん。

require 'csv'
CSV.open('in.csv', 'r') do |row|
  p row
end

fastercsvを使ってみた

でも遅いらしいのでfastercsvをインストール。
Rubyの標準添付CSVパーサーが遅い - 技術メモ帳


こっちも簡単。

require 'rubygems'
require 'fastercsv'
FasterCSV.foreach('in.csv') do |row|
  p row
end