旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

RubyでCSV行を追加書きする

2007年6月20日

素直な使い方はこうなんですけど

require "csv"
CSV.open("/path/to/filename.csv", "w") do |writer|
    writer << ['aaa', 'bbb', 'ccc']
end

これだと(理由はわかりませんが)ファイル末尾に追加書きするモードがありません。

なので、こうしたら

outfile = File.open('/path/to/filename.csv', 'a')
CSV::Writer.generate(outfile) do |writer|
    writer << ['aaa', 'bbb', 'ccc']
end

上手くいきました。

動いてるのでよしとしてますが
「何故、通常の使い方で"a"モードが無いのか」の理由は調べてません。
もしかしたら、やっちゃいけないのかもしれないス
【追記 2008-01-30】
以下のコードで、上書きモードで書き出したCSVファイルの末尾が切れることがありました。

outfile = File.open('/path/to/filename.csv', 'w') # 上書きモードに変えて行っていた
CSV::Writer.generate(outfile) do |writer|
    writer << ['aaa', 'bbb', 'ccc']
end

対処としては、CSV.generate にメソッドを変更したら治りました。
ソースは追いきれず、理由は不明のままです。