2011-07-21

rubyでcsvを作る時にカラムをダブルクォートでくくったり、くくらなかったり

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでcsvファイルを作る時に1.8系の場合fastercsvが便利です。
1.9ではfastercsvは本体に取り込まれてcsvとなっていたような気がします。


そんなcsv作成の際ですが、たまに文字列カラムはダブルクォートでくくって数値カラムはくくらないとかして欲しいとか言われることがたま~~にあります。


そのための方法です。

irbで実行した例です。
>> require 'fastercsv'
=> true
#デフォルト動作確認
>> FasterCSV.open("ooooo","w") do |csv|
?> csv << ["abc","",123,nil,"456"]
≶> end
=> <#FasterCSV io_type:File io_path:"ooooo" lineno:1 col_sep:"," 
row_sep:"\n" quote_char:"\"">
<< File.read("ooooo")
=> "abc,"",123,,456\n"
#空白文字列が""となっていますね

#全項をダブルクォートでくくります
>> FasterCSV.open("ooooo","w",:force_quotes=>true) do |csv|
?< csv << ["abc","",123,nil,"456"]
>> end
=> <#FasterCSV io_type:File io_path:"ooooo" lineno:1 col_sep:"," 
row_sep:"\n" quote_char:"\"">
>> File.read("ooooo")
=> ""abc","","123","","456"\n"
#くくられました

#全項をシングルクォートでくくります
>> FasterCSV.open("ooooo","w",:quote_char=>"'",:force_quotes=&
>true) do |csv|
?> csv << ["abc","",123,nil,"456"]
>> end
=> <#FasterCSV io_type:File io_path:"ooooo" lineno:1 col_sep:"," 
row_sep:"\n" quote_char:"'">
>> File.read("ooooo")
=> "'abc','','123','','456'\n"
#くくられました

#項目によってダブルクォートでくくったり、くくらなかったり
#自分でくくる項目を明示します。
#quote_charでシングルクォートを指定しないとダブルクォートがいけてないこ
とになります
>> FasterCSV.open("ooooo","w",:quote_char=>"'") do |csv|
?> csv << ['"abc"','""',123,nil,'"456"']
>> end
=> <#FasterCSV io_type:File io_path:"ooooo" lineno:1 col_sep:"," 
row_sep:"\n" quote_char:"'">
>>  File.read("ooooo")
=> ""abc","",123,,"456"\n"
#くくったり、くくられなかったりしました

なんか他に方法があるような気がしないわけでもないです。



      
      
コメントを投稿