ラベル FasterCSV の投稿を表示しています。 すべての投稿を表示
ラベル FasterCSV の投稿を表示しています。 すべての投稿を表示

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 読み込みと共通って書いてあるけど、使えるオプションはこれくらいかと。

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

実行環境:
Rails 3.0.7
FasterCSV 1.5.4

FasterCSVを使う(その2):読み込み編

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

実行環境:
Rails 3.0.7
ruby 1.8.7
FasterCSV 1.5.4

FasterCSVを使う(その1):インストール編


FasterCSV は CSV 形式ファイルの読み書きができる gem です。
標準でも CSV の読み書きができる CSV クラスがありますが、FasterCSV の方が速いらしいです。(でも比較してないので、そこは気分で ^^;)

ちなみに ruby 1.9.x になって FasterCSV が標準の CSV クラスとして採用されているので FasterCSV をわざわざインストールする必要はありません。普通に require 'csv' して FasterCSV クラスの代わりに CSV クラスを使えばOKです。

FasterCSV のインストール
Bundler を使えば簡単にインストールできます。

①アプリケーションのルートディレクトリのGemfileに
./Gemfile
gem 'fastercsv'
を追記

②Bundlerでインストール
> bundle install

※Bundlerでのインストールについては、[Rails3] Bundlerを使ってGemファイルをインストールも見てね。

③requireも忘れずに
アプリケーション全体で頻繁に使うなら、config/application.rb に書いていつでも使えるようにします。
config/application.rb
class Application < Rails::Application # ... require 'fastercsv' end

特定の controller や特定の action でしか使わないよ、ということなら個別の controller の中に書いてもいいです。
app/controller/user_controller.rb
class UserController < ApplicationController require 'fastercsv' # controller の中に書く場合 def index require 'fastercsv' # action の中に書く場合 # ... end end
もしくは
app/controller/user_controller.rb
class UserController < ApplicationController end

これで準備OKです。