extend: Forwardable
要約
CSV::Table は CSV ドキュメントを表す二次元のデータ構造です。行単位や列単位の操作を行うことが出来ます。また必要であれば CSV に戻すこともできます。
ヘッダ行の処理が有効である場合、CSV から返されるテーブルは全てこのクラスから構築されます。
以下のメソッドを Array に委譲します。
アクセスモード
以下の三種類のモードがあります。
- :col_or_row
-
デフォルトはこのモードです。このマニュアル内ではミックスモードと呼んでいます。行単位でアクセスするか列単位でアクセスするか自動的に判断します。
- :row
-
ロウモード。テーブルに行単位でアクセスします。
- :column
-
カラムモード。テーブルに列単位でアクセスします。
目次
- 特異メソッド
- インスタンスメソッド
- protectedメソッド
継承しているメソッド
- Enumerableから継承しているメソッド
-
- all?
- any?
- chunk
- collect
- collect_concat
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- find
- find_all
- find_index
- first
- flat_map
- grep
- group_by
- include?
- inject
- lazy
- map
- max
- max_by
- member?
- min
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_before
- sort
- sort_by
- take
- take_while
- zip
特異メソッド
new(array_of_rows) -> CSV::Table[permalink][rdoc]-
自身を初期化します。
全ての行が同じヘッダを持つことを仮定しています。
- [PARAM] array_of_rows:
- CSV::Row のインスタンスの配列を指定します。
インスタンスメソッド
self << row_or_array -> self[permalink][rdoc]-
自身の最後に新しい行を追加します。
- [PARAM] row_or_array:
- CSV::Row のインスタンスか配列を指定します。配列を指定した場合は CSV::Row に変換されます。
- [RETURN]
- メソッドチェーンのために自身を返します。
self == other -> bool[permalink][rdoc]-
自身の全ての行が比較対象と同じである場合は真を返します。そうでない場合は偽を返します。
- [PARAM] other:
- CSV::Table を指定します。
self[index_or_header] -> object[permalink][rdoc]-
ミックスモードでは、このメソッドは引数に行番号を指定すれば行単位で動作し、ヘッダの名前を指定すれば列単位で動作します。
このメソッドを呼び出す前に CSV::Table#by_col! を呼び出すとカラムモードになります。また CSV::Table#by_row! を呼び出すとロウモードになります。
- [PARAM] index_or_header:
- 行番号かヘッダの名前を指定します。
- [RETURN]
- 値の配列を返します。この配列を変更しても元のデータには何の影響もありません。
self[index_or_header] = value[permalink][rdoc]-
ミックスモードでは、このメソッドは引数に行番号を指定すれば行単位で動作し、ヘッダの名前を指定すれば列単位で動作します。
このメソッドを呼び出す前に CSV::Table#by_col! を呼び出すとカラムモードになります。また CSV::Table#by_row! を呼び出すとロウモードになります。
行には配列か CSV::Row のインスタンスを指定します。
列に値を一つだけ指定した場合は、全ての行にその値をコピーします。配列を指定した場合は、上から順に値を割り当てます。余分な値は無視します。また、値が不足している場合は nil を割り当てます。
既存の行または列のデータを上書きします。新しい列を追加する場合は、右端に列を追加します。
- [PARAM] index_or_header:
- 行番号かヘッダの名前を指定します。
- [PARAM] value:
- 値を指定します。
by_col -> CSV::Table[permalink][rdoc]-
カラムモードになっている新しい CSV::Table オブジェクトを返します。
元のテーブルモードを変更せずにメソッドチェーンできるので便利です。しかし、大きなデータセットに対しても同じだけメモリを消費するので気をつけてください。
このメソッドは複製したテーブルを返すので、破壊的なメソッドはメソッドチェーンに組込まないようにしてください。
by_col! -> self[permalink][rdoc]-
自身をカラムモードに変更します。
再びモードが変更されるまで、いくつかのメソッドはカラム単位で動きます。
- [RETURN]
- 必ず自身を返すので安全にメソッドチェーンできます。
by_col_or_row -> CSV::Table[permalink][rdoc]-
ミックスモードになっている新しい CSV::Table オブジェクトを返します。
元のテーブルモードを変更せずにメソッドチェーンできるので便利です。しかし、大きなデータセットに対しても同じだけメモリを消費するので気をつけてください。
このメソッドは複製したテーブルを返すので、破壊的なメソッドはメソッドチェーンに組込まないようにしてください。
by_col_or_row! -> self[permalink][rdoc]-
自身をミックスモードに変更します。
再びモードが変更されるまで、いくつかのメソッドはミックスモードで動きます。
デフォルトのミックスモードではインデックスによるアクセスは行単位での参照であると見なします。しかし、他の方法ではヘッダによる列単位での参照であると見なします。
- [RETURN]
- 必ず自身を返すので安全にメソッドチェーンできます。
by_row -> CSV::Table[permalink][rdoc]-
ロウモードになっている新しい CSV::Table オブジェクトを返します。
元のテーブルモードを変更せずにメソッドチェーンできるので便利です。しかし、大きなデータセットに対しても同じだけメモリを消費するので気をつけてください。
このメソッドは複製したテーブルを返すので、破壊的なメソッドはメソッドチェーンに組込まないようにしてください。
by_row! -> self[permalink][rdoc]-
自身をロウモードに変更します。
再びモードが変更されるまで、いくつかのメソッドは行単位で動きます。
- [RETURN]
- 必ず自身を返すので安全にメソッドチェーンできます。
delete(index_or_header) -> object[permalink][rdoc]-
指定された行か列を削除して返します。
デフォルトのミックスモードではインデックスによるアクセスは行単位での参照であると見なします。しかし、他の方法ではヘッダによる列単位での参照であると見なします。
探索方法を変更したい場合は CSV::Table#by_col!, CSV::Table#by_row! を使用してください。
[SEE_ALSO] CSV::Table#by_col!, CSV::Table#by_row!
delete_if {|row| ... } -> self[permalink][rdoc]delete_if {|column_name, values| ... } -> self-
ブロックを評価した結果が真である行か列を削除します。
デフォルトのミックスモードかロウモードでは、行単位で繰り返します。カラムモードでは、ブロックに列名と対応する値の配列を与え、列単位で繰り返します。
each {|header, field| ... } -> self[permalink][rdoc]each {|column_name, values| ... } -> self-
デフォルトのミックスモードかロウモードでは、行単位で繰り返します。カラムモードでは、ブロックに列名と対応する値の配列を与え、列単位で繰り返します。
empty? -> bool[permalink][rdoc]-
Array#empty? に委譲します。
headers -> Array[permalink][rdoc]-
自身のヘッダ行を返します。
テーブルが空である場合は空の配列を返します。
inspect -> String[permalink][rdoc]-
モードとサイズを US-ASCII な文字列で返します。
例:
require 'csv' csv = CSV.new("a,b,c\n1,2,3", headers: true) table = csv.read table.inspect # => "#<CSV::Table mode:col_or_row row_count:2>" length -> Fixnum[permalink][rdoc]size -> Fixnum-
Array#length, Array#size に委譲します。
mode -> Symbol[permalink][rdoc]-
現在のアクセスモードを返します。
push(*rows) -> self[permalink][rdoc]-
複数の行を追加するためのショートカットです。
- [PARAM] rows:
- CSV::Rows のインスタンスか配列を指定します。
以下と同じです。
csv = CSV.new("a,b,c\n,1,2,3", headers: true) table = csv.read rows = [[4, 5, 6], [7, 8, 9]] rows.each{|row| table << row } to_a -> [Array][permalink][rdoc]-
配列の配列を返します。
一番目の要素はヘッダで、残りの要素はデータを表わします。
to_csv(options = Hash.new) -> String[permalink][rdoc]to_s(options = Hash.new) -> String-
CSV の文字列に変換して返します。
ヘッダを一行目に出力します。その後に残りのデータを出力します。
デフォルトでは、ヘッダを出力します。オプションに :write_headers => false を指定するとヘッダを出力しません。
例:
csv = CSV.new("a,b,c\n,1,2,3", headers: true) table = csv.read table.to_csv # => "a,b,c\n1,2,3\n" table.to_csv(write_headers: false) # => "1,2,3\n" values_at(indices_or_headers) -> Array[permalink][rdoc]-
デフォルトのミックスモードでは、インデックスのリストを与えると行単位の参照を行い、行の配列を返します。他の方法は列単位の参照と見なします。行単位の参照では、返り値は行ごとの配列を要素に持つ配列です。
探索方法を変更したい場合は CSV::Table#by_col!, CSV::Table#by_row! を使用してください。
アクセスモードを混在させることはできません。
[SEE_ALSO] CSV::Table#by_col!, CSV::Table#by_row!
protectedメソッド
table -> Array[permalink][rdoc]-
同値性を比較するために内部的に使用します。