library csv

[edit]

要約

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

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

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

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

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

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

CSV 構文解析

インターフェイス

CSV とは

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

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

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

data.split(",")

クラス

CSV

このクラスは CSV ファイルやデータに対する完全なインターフェイスを提供します。

CSV::Row

CSV::Row は配列やハッシュに似ています。

CSV::Table

CSV::Table は CSV ドキュメントを表す二次元のデータ構造です。行単位や列単位の操作を行うことが出来ます。また必要であれば CSV に戻すこともできます。

CSV::FieldInfo

行が読み込まれたデータソース内でのフィールドの位置の情報を格納するための構造体です。

例外クラス

CSV::MalformedCSVError

不正な CSV をパースしようとしたときに発生する例外です。

追加・再定義されるメソッド

Array#to_csv String#parse_csv