CSVを読み込む&新規CSVファイルに書き込む

RubyCSVファイルを読み込んで、新規のCSVファイルに書き込む。
FasterCSVというgemを使った方が速いらしいが、あえてスルー。

新規CSVファイルに書き込む

CSVファイルを読み込んで、一部を置換したものを新規CSVとして保存する。
File.openはファイルオブジェクトを返すが、CSV.openはブロックを渡すと、各行の配列を返す。

require 'csv'

path = ARGV.shift
new_csv = File.join(File.dirname(path), 'hoge.csv')

rows=[]
CSV.open(path, 'r') do |row|
  row[0].gsub! /hoge/, "hage"
  rows << row
end

CSV.generate(new_csv) do |writer|
  rows.each {|row| writer << row }
end

既存CSVファイルに追記したい場合

追記モードで開いたファイルオブジェクトを、CVS::Writer.generate に渡す。
CSV.open に追記モードがあればいいのに。

...
f = File.open(new_csv, 'a')
CSV::Writer.generate(f) do |writer|
  rows.each {|row| writer << row }
end