Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > csvライブラリ > CSVクラス

class CSV

クラスの継承リスト: CSV < Object < Kernel

要約

CSV (Comma Separated Values) を扱うクラスです。

各メソッドの共通パラメタ

mode
   'r', 'w', 'rb', 'wb' から指定可能です。

   - 'r' 読み込み
   - 'w' 書き込み
   - 'b' バイナリモード
fs
   フィールドの区切り文字(あるいは文字列)。
   数値(Integer#chr で変換可能な値のみ)を指定した場合は対応する文字が区切り文字になります。
   デフォルトは ','。
rs
   行区切り文字。nil (デフォルト) で CrLf / Lf。
   Cr で区切りたい場合は ?\r を渡します。

目次

特異メソッド
foreach generate generate_line generate_row open parse parse_line parse_row read readlines

特異メソッド

foreach(path, rs = nil) {|row| ... } -> nil[permalink][rdoc]

読み込みモードでファイルを開き、各行を配列でブロックに渡します。

[PARAM] path:
パースするファイルのファイル名
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
注意

パース時に""(空文字)と値なしを区別します。 例えば、a, "", , b の行をパースした場合には ["a", "", nil, "b"] の配列を返します。

例:

CSV.foreach('test.csv'){|row|
  puts row.join(':')
}
generate(path, fs = nil, rs = nil) -> CSV::BasicWriter[permalink][rdoc]
generate(path, fs = nil, rs = nil) {|writer| ... } -> nil

path で指定されたファイルを書き込みモードで開き、ブロックに渡します。 ブロック未指定の場合は CSV::BasicWriter を返します。

[PARAM] path:
書き込みモードでopenするファイルのファイル名
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
注意

ファイル書き込み時に""(空文字)と値なし(nil)を区別します。 例えば、["a", "", nil, "b"] の配列を渡した場合に a, "", , b という行をファイルに書き込みます。

例:

a = ["1","ABC","abc"]
b = ["2","DEF","def"]
c = ["3","GHI","ghi"]
x = [a, b, c]

CSV.generate("test2.csv"){|writer|
  x.each{|row|
    writer << row
  }
}
generate_line(row, fs = nil, rs = nil) -> String[permalink][rdoc]

row で指定された配列をパースし、fs で指定された文字をフィールドセパレータとして 1行分の文字列を返します。

[PARAM] row:
パースする配列
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
無視されます。
generate_row(src, cells, out_dev, fs = nil, rs = nil) -> Fixnum[permalink][rdoc]

src で指定された配列をパースして csv形式の文字列として(行区切り文字も含めて) out_dev に出力します。 返り値として fs で区切ったフィールド(cell)の数を返します。

[PARAM] src:
パースする配列
[PARAM] cells:
パースするフィールド数。
[PARAM] out_dev:
csv形式の文字列の出力先。
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
注意

配列のパース時に""(空文字)と値なし(nil)を区別します。 例えば、["a", "", nil, "b"] の配列を渡した場合に a,"", , b という文字列を生成します。

例:

row1 = ['a', 'b', 'c']
row2 = ['1', '2', '3']
row3 = ['A', 'B', 'C']
src = [row1, row2, row3]
buf = ''
src.each do |row|
  parsed_cells = CSV.generate_row(row, 2, buf)
end
p buf #=>"a,b\n1,2\n,A,B\n"
open(path, mode, fs = nil, rs = nil) {|row| ... } -> nil[permalink][rdoc]
open(path, mode, fs = nil, rs = nil) -> CSV::Reader | CSV::Writer

CSVファイルを読み込んでパースします。

読み込みモード時には path にあるファイルを開き各行を配列として ブロックに渡します。

[PARAM] path:
パースするファイルのファイル名
[PARAM] mode:
処理モードの指定 'r', 'w', 'rb', 'wb' から指定可能です。 - 'r' 読み込み - 'w' 書き込み - 'b' バイナリモード
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CRLF / LF。 CR を行区切りとしたい場合は ?\r を渡します。
注意

パース時に""(空文字)と値なし(nil)を区別します。 例えば、読み込みモード時にa, "", , b の行をパースした場合には ["a", "", nil, "b"] の配列を返します。

例:

CSV.open("/temp/test.csv", 'r') do |row|
  puts row.join("<>")
end

tsv(Tab Separated Values)ファイルなどのセパレータをカンマ以外で指定

CSV.open("/temp/test.tsv", 'r', "\t") do |row|
  puts row.join("<>")
end

ブロックを渡さなかった場合 CSV::Reader を返します。

書き込みモード時には path にあるファイルを開き CSV::Writer をブロックに渡します。

例:

CSV.open("/temp/test.csv", 'w') do |writer|
  writer << ["ruby", "perl", "python"]
  writer << ["java", "C", "C++"]
end

ブロック未指定の場合 CSV::Writer を返します。

parse(str_or_readable, fs = nil, rs = nil) -> Array[permalink][rdoc]
parse(str_or_readable, fs = nil, rs = nil) {|rows| ... } -> nil

str_or_readable で指定された文字列をパースし配列の配列に変換、ブロックに渡します。 ブロック未指定の場合は変換された配列の配列を返します。

[PARAM] str_or_readable:
パースする文字列
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。

例:

CSV.parse("A,B,C\nd,e,f\nG,H,I"){|rows|
  p rows
}
parse_line(src, fs = nil, rs = nil) -> Array[permalink][rdoc]

src で指定された文字列を1行分としてパースし配列に変換して返します。

[PARAM] src:
パースする文字列
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
parse_row(src, index, out_dev, fs = nil, rs = nil) -> Array[permalink][rdoc]

CSV形式の文字列をパースしてCSV1行(row)分のデータを配列に変換し out_dev に出力します。

[PARAM] src:
パースする文字列(CSV形式)
[PARAM] index:
パース開始位置
[PARAM] out_dev:
変換したデータの出力先。
[PARAM] fs:
フィールドセパレータの指定。 nil (デフォルト) で ',' をセパレータとします。
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
[RETURN]
変換したArrayのサイズと変換をした文字列の位置をArrayとして返します。
注意

パース時に""(空文字)と値なしを区別します。 例えば、a, "", , b の行をパースした場合には ["a", "", nil, "b"] の配列を返します。

例:

src = "a,b,c\n1,2\nA,B,C,D"
i = 0

x = [] #結果を格納する配列
begin
  parsed = []
  parsed_cells, i = CSV.parse_row(src, i, parsed)
  x.push(parsed)
end while parsed_cells > 0

x.each{ |row|
  p '-----'
  row.each{ |cell|
    p cell
  }
}

実行結果:

a
b
c
-----
1
2
-----
A
B
C
D
read(path, length = nil, offset = nil) -> Array[permalink][rdoc]

path で指定された CSV ファイルを読み込み、配列の配列でデータを返します。

[PARAM] path:
パースするファイルのファイル名
[PARAM] length:
対象ファイルの読み込みサイズ
[PARAM] offset:
読み込み開始位置
注意

パース時に""(空文字)と値なしを区別します。 例えば、a, "", , b の行をパースした場合には ["a", "", nil, "b"] の配列を返します。

readlines(path, rs = nil) -> Array[permalink][rdoc]

path で指定された CSV ファイルを読み込み、配列の配列でデータを返します。

[PARAM] path:
パースするファイルのファイル名
[PARAM] rs:
行区切り文字の指定。nil (デフォルト) で CrLf / Lf。 Cr を行区切りとしたい場合は ?\r を渡します。
注意

パース時に""(空文字)と値なしを区別します。 例えば、a, "", , b の行をパースした場合には ["a", "", nil, "b"] の配列を返します。