読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

CSVの追加書き込み

Ruby

Rubyに標準添付されているCSVライブラリですが、なぜか追記がサポートされていないようなのでちょっと改造してみました。以下のコードをロードすると、CSV.openのmodeとして「a」,「ab」が指定できるようになります。

require 'csv'

# 追記をサポートするように改造。
class << CSV
  alias_method( :open_org, :open )
  
  def open( path, mode, fs=nil, rs=nil, &block )
    if mode == "a" || mode == "ab"
      open_writer( path, mode, fs, rs, &block)
    else
      open_org( path, mode, fs=nil, rs=nil, &block )
    end
  end
end

使い方例。

# 追記
CSV.open( "./test.csv", "a" ){ |csv|
  csv << ["a", "aa", "aaa"]
  csv << ["b", "bb", "bbb"]
}

puts "---"
CSV.open( "./test.csv", "r") {|row|
  puts row.join(",")
}

# さらに追記
CSV.open( "./test.csv", "a" ){ |csv|
  csv << ["c", "cc", "ccc"]
  csv << ["d", "dd", "ddd"]
}

puts "---"
CSV.open( "./test.csv", "r") {|row|
  puts row.join(",")
}

実行結果です。

---
a,aa,aaa
b,bb,bbb
---
a,aa,aaa
b,bb,bbb
c,cc,ccc
d,dd,ddd

内部的にはCSV.open内での引数チェックを回避するようにしただけ。これでcsvファイルを開く時のmodeとして「a」や「ab」が渡されるようになります。一応ちゃんと動作している様子。