以下の内容はhttps://unageanu.hatenablog.com/entry/20080824/1219576777より取得しました。


CSVの追加書き込み

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」が渡されるようになります。一応ちゃんと動作している様子。




以上の内容はhttps://unageanu.hatenablog.com/entry/20080824/1219576777より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14