2011年6月16日木曜日

[Rails3] FasterCSVを使う(その3)

実行環境:
Rails 3.0.7
FasterCSV 1.5.4

FasterCSVを使う(その3):CSV出力編

CSV形式のテキストを出力するわけですが、出力のやり方は2通りあります。1つは文字列として取得する方法、もう1つはCSVファイルとしてローカルに(Railsアプリが動いているサーバ上に)書き出す方法です。
  • CSV形式の文字列を取得
  • CSVファイルに書き出す

CSV形式の文字列として取得する
使い方は簡単で、二次元配列を作ってあげるとCSV形式に組み立ててくれる、といった感じです。
csv_string = FasterCSV.generate do |csv|
  csv << ['1', 'Edward', 'steel']
  csv << ['2', 'Roy', 'flame']
  csv << ['3', 'Alex', 'iron-armed']
end
直接CSVファイルに書き出す
ファイルに書き出す場合も似たような書き方で、ファイル名を指定してファイルに書き出します。
FasterCSV.open('output.csv', 'w') do |csv|
  csv << ['1', 'Edward', 'steel']
  csv << ['2', 'Roy', 'flame']
  csv << ['3', 'Alex', 'iron-armed']
end
出力のオプション
デフォルトの設定ではカンマ区切りのCSVが出力されますが、区切り文字をタブに変更したり、といったことができます。
タブ区切り
csv_string = FasterCSV.generate({:col_sep => "¥t"}) do |csv| csv << ['1', 'Edward', 'steel'] end # csv_string: 1(tab)Edward(tab)steel
レコード区切りも変更
csv_string = FasterCSV.generate({:col_sep => ":", :row_sep => "|"}) do |csv| csv << ['1', 'Edward', 'steel'] csv << ['2', 'Roy', 'flame'] end # csv_string: 1:Edward:steel|2:Roy:flame
各フィールドを引用符で囲む場合
ダブルクォーテーションマーク(")で囲む
csv_string = FasterCSV.generate({:quote_char => '"', :force_quotes => true}) do |csv| csv << ['1', 'Edward', 'steel'] end # csv_string: "1","Edward","steel"
囲む文字 :quote_char はデフォルトで「'」にセットされていて :force_quotes => true を指定すると初めて表示されます。:quote_char を空文字列にすると1文字にしろとおこられるので、囲みたくない場合は :quote_char を消すのではなく :force_quotes => false (デフォルト値) にするということですね。

ドキュメントにはオプションが CSV 読み込みと共通って書いてあるけど、使えるオプションはこれくらいかと。

0 件のコメント:

コメントを投稿