プロが教える店舗&オフィスのセキュリティ対策術

Windows XPでruby 1.9を使用しております。
(ruby 1.9.3p286 (2012-10-12 revision 37165) [i386-mswin32_100])

CSVライブラリの勉強をしていて見つけたのですが、下のプログラムで改行を含むデータを持つCSVを読み込み出力すると、その改行部分に余分な空行が追加されてしまいます。

出力されたoutput.csvをバイナリエディタで確認すると改行を含むデータの改行部分が
元は0x0D,0x0Aであったものが出力されたファイルでは0x0D,0x0D,0x0Aと
0x0Dが1個余分にくっついているのが原因のようです。

この現象を回避する方法がありましたら教えてください。
よろしくお願いします。

-----test.rb
# coding: Windows-31J
require 'CSV'

CSV.open('output.csv','w') do |csv|
CSV.foreach('input.csv') do |row|
csv << row
end
end
-----

-----input.csv
10,11,12
20,"2
1",22
30,31,32
-----

-----出力output.csv
10,11,12
20,"2
          <- この空行が追加されてしまいます。
1",22
30,31,32
-----

A 回答 (1件)

Rubyのバグのようですね。

とりあえず回避のために、

row.map!{|x| x.sub(/\r/,'')}

と、\r を削除してください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
何か設定で回避可能かと思い質問させていただきましたが、バグでは仕方がありませんね。
修正されるのを待ちます。

お礼日時:2012/12/05 18:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!