requires=
classes=CSV,CSV=FieldInfo,CSV=MalformedCSVError,CSV=Row,CSV=Table
methods=
sublibraries=
is_sublibrary=false
category=FileFormat

CSV (Comma Separated Values) を扱うライブラリです。


このバージョンの CSV ライブラリは FasterCSV から始まりました。
FasterCSV は Ruby1.8 に標準添付されている CSV ライブラリの置き換えとして開発されました。
このライブラリはユーザの関心事を解決するためにデザインされています。
主なゴールが三つあります。

 (1) ピュア Ruby のままで元の CSV ライブラリよりもかなり速くすること
 (2) 小さくメンテナンスしやすいコードベースであること (FasterCSV はかなり大きく
     機能豊かになりました。構文解析部分のコードはかなり小さいままです)
 (3) CSV のインターフェイスを改善すること

明らかに最後のものは主観的です。変更するやむを得ない理由が無い限り、オリジナルの
インターフェイスに従うようにしたので、おそらく旧 CSV ライブラリとはあまり
大きな違いは無いでしょう。

=== 古い CSV ライブラリとの違い

大きな違いについて言及します。

==== CSV 構文解析

 * このパーサは m17n に対応しています。[[c:CSV]] も参照してください
 * このライブラリはより厳しいパーサを持っているので、問題のあるデータに対して [[c:CSV::MalformedCSVError]] を投げます
 * 旧 CSV ライブラリよりも行末に関しては寛容ではありません。あなたが :row_sep としてセットした値が法です。
   しかし、自動検出させることもできます
 * 旧ライブラリでは空行に対して [nil] を返しますが、このライブラリは空の配列を返します
 * このライブラリはかなり速いパーサを持っています

==== インターフェイス

 * オプションをセットするのにハッシュ形式の引数を使うようになりました
 * CSV#generate_row, CSV#parse_row はなくなりました
 * 古い CSV::Reader, CSV::Writer クラスはなくなりました
 * [[m:CSV.open]] はより Ruby らしくなりました
 * [[c:CSV]] オブジェクトは [[c:IO]] の多くのメソッドをサポートするようになりました
 * 文字列や IO のようなオブジェクトを読み書きするためにラップする [[m:CSV.new]] メソッドが追加されました
 * [[m:CSV.generate]] は古いものとは異なります
 * 部分読み出しはもうサポートしていません。読み込みは行単位で行います
 * パフォーマンスのため、インスタンスメソッドでセパレータを上書き出来なくなりました。
   [[m:CSV.new]] でセットするようにしてください。

=== CSV とは

CSV ライブラリは [[RFC:4180]] から直接とられたかなり厳しい定義を維持します。
一ヶ所だけ定義を緩和することでこのライブラリを使いやすくしています。[[c:CSV]] は
すべての有効な CSV ファイルをパースします。

不正な CSV データを与えたくない。あるフィールドが不正であることが確定す
るのはファイルを全て読み込んだ後です。これは多くの時間やメモリを消費し
ます。

Ruby の組込みメソッドはほとんど全ての点でより優れています。運が良ければ
不正な CSV データを与えても動きます。例えば、クオートされていないフィー
ルドだけを持つ CSV データは次のように簡単にパースできます。

  data.split(",")
