extend: Forwardable
要約
CSV::Row は配列やハッシュに似ています。
配列のようにフィールドの順序を保持していて、複製する事もできます。また、ハッシュのように名前でフィールドにアクセスする事もできます。
ヘッダ行の処理が有効である場合は CSV から返される全ての行はこのクラスのインスタンスです。
以下のメソッドを Array に委譲します。
- empty?()
- length()
- size()
目次
- 特異メソッド
- インスタンスメソッド
- protectedメソッド
継承しているメソッド
- Enumerableから継承しているメソッド
-
- all?
- any?
- chain
- chunk
- chunk_while
- collect
- collect_concat
- compact
- count
- cycle
- detect
- drop
- drop_while
- each_cons
- each_entry
- each_slice
- each_with_index
- each_with_object
- entries
- filter
- filter_map
- find
- find_all
- find_index
- first
- flat_map
- grep
- grep_v
- group_by
- inject
- lazy
- map
- max
- max_by
- member?
- min
- min_by
- minmax
- minmax_by
- none?
- one?
- partition
- reduce
- reject
- reverse_each
- select
- slice_after
- slice_before
- slice_when
- sort
- sort_by
- sum
- take
- take_while
- tally
- to_a
- to_h
- uniq
- zip
特異メソッド
new(headers, fields, header_row = false) -> CSV::Row
[permalink][rdoc][edit]-
自身を初期化します。
一方の配列が他方の配列よりも短い場合、不足しているところは nil になります。
- [PARAM] headers:
- ヘッダの配列を指定します。
- [PARAM] fields:
- フィールドの配列を指定します。
- [PARAM] header_row:
- ヘッダ行である場合は真を指定します。そうでない場合は偽を指定します。デフォルトは偽です。
require "csv" header = CSV::Row.new(["header1", "header2"], [], header_row: true) table = CSV::Table.new([header]) table.to_a # => [["header1", "header2"]]
require "csv" row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row2 = CSV::Row.new(["header1", "header2"], ["row2_1", "row2_2"]) table = CSV::Table.new([row1, row2]) table.to_a # => [["header1", "header2"], ["row1_1", "row1_2"], ["row2_1", "row2_2"]]
[SEE_ALSO] CSV::Row#header_row?, CSV::Row#field_row?
インスタンスメソッド
self << arg -> self
[permalink][rdoc][edit]-
自身に与えられたデータを追加します。
- [PARAM] arg:
- 2 要素の配列か 1 要素のハッシュか任意のオブジェクトを指定します。 2 要素の配列を与えた場合は、ヘッダとフィールドのペアを追加します。 1 要素のハッシュを与えた場合は、キーをヘッダ、値をフィールドとして追加します。それ以外の場合は、ヘッダを nil 、フィールドを与えられた値として追加します。
- [RETURN]
- メソッドチェーンのために自身を返します。
require "csv" row = CSV::Row.new([], [], true) row << ["header1", "row1_1"] row << ["header2", "row1_2"] row.to_a # => [["header1", "row1_1"], ["header2", "row1_2"]]
require "csv" row = CSV::Row.new([], [], true) row << { "header1" => "row1_1" } row << { "header2" => "row1_2" } row.to_a # => [["header1", "row1_1"], ["header2", "row1_2"]]
self == other -> bool
[permalink][rdoc][edit]-
自身が other と同じヘッダやフィールドを持つ場合に真を返します。そうでない場合は偽を返します。
- [PARAM] other:
- 比較対象の CSV::Row のインスタンスを指定します。
require "csv" row1 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row2 = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row1 == row2 # => true row2 << ["header3", "row1_3"] row1 == row2 # => false
field(header_or_index, minimum_index = 0) -> object | nil
[permalink][rdoc][edit]self[header_or_index, minimum_index = 0] -> object | nil
-
ヘッダの名前かインデックスで値を取得します。フィールドが見つからなかった場合は nil を返します。
- [PARAM] header_or_index:
- ヘッダの名前かインデックスを指定します。
- [PARAM] minimum_index:
- このインデックスより後で、ヘッダの名前を探します。重複しているヘッダがある場合に便利です。
require "csv" row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row.field("header1") # => "row1_1" row.field("header2") # => "row1_2" row["header1"] # => "row1_1" row["header2"] # => "row1_2"
self[header_or_index] = value
[permalink][rdoc][edit]-
ヘッダの名前かインデックスでフィールドを探し、値をセットします。
末尾より後ろのインデックスを指定すると、ヘッダの名前は nil になります。存在しないヘッダを指定すると、新しい要素を末尾に追加します。
- [PARAM] header_or_index:
- ヘッダの名前かインデックスを指定します。
- [PARAM] value:
- 値を指定します。
require "csv" row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row["header1"] # => "row1_1" row["header1"] = "updated" row["header1"] # => "updated"
require "csv" row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row["header1"] # => "row1_1" row[0] = "updated" row["header1"] # => "updated"
require "csv" row = CSV::Row.new(["header1", "header2", "header1"], ["row1_1", "row1_2", "row1_3"]) row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2" "header1":"row1_3"> row["header1", 1] = "updated" row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2" "header1":"updated">
[SEE_ALSO] CSV::Row#field
self[header, offset] = value
[permalink][rdoc][edit]-
ヘッダの名前でフィールドを探し、値をセットします。
- [PARAM] header:
- ヘッダの名前を指定します。
- [PARAM] offset:
- このインデックスより後で、ヘッダの名前を探します。重複しているヘッダがある場合に便利です。
- [PARAM] value:
- 値を指定します。
[SEE_ALSO] CSV::Row#field
deconstruct -> [object]
[permalink][rdoc][edit]-
パターンマッチに使用する行の値の配列を返します。
require "csv" row = CSV::Row.new(["header1", "header2", "header3"], [1, 2, 3]) case row in [2.., 2.., 2..] puts "all 2 or more" in [...2, 2.., 2..] puts "first column is less than 2, and rest columns are 2 or more" end #=> "first column is less than 2, and rest columns are 2 or more" が出力される
[SEE_ALSO] パターンマッチ/非プリミティブなオブジェクトのマッチ: deconstruct メソッドと deconstruct_keys メソッド
deconstruct_keys(keys) -> Hash
[permalink][rdoc][edit]-
パターンマッチに使用するヘッダの名前と値の Hash を返します。
このメソッドはヘッダ名の型をシンボルに変換しないため、ヘッダ名が文字列かつ Hash パターン でパターンマッチしたい場合はキーをシンボルに変換する必要があります。
- [PARAM] keys:
- パターンマッチに使用するヘッダの名前の配列を指定します。nil の場合は全てをパターンマッチに使用します。
require "csv" row = CSV::Row.new([:header1, :header2, :header3], [1, 2, 3]) case row in { header1: 2.., header2: 2.., header3: 2.. } puts "all 2 or more" in { header1: ...2, header2: 2.., header3: 2.. } puts "first column is less than 2, and rest columns are 2 or more" end #=> "first column is less than 2, and rest columns are 2 or more" が出力される
[SEE_ALSO] パターンマッチ/非プリミティブなオブジェクトのマッチ: deconstruct メソッドと deconstruct_keys メソッド
delete(header_or_index, minimum_index = 0) -> [object, object] | nil
[permalink][rdoc][edit]-
ヘッダの名前かインデックスで行からフィールドを削除するために使用します。
- [PARAM] header_or_index:
- ヘッダの名前かインデックスを指定します。
- [PARAM] minimum_index:
- このインデックスより後で、ヘッダの名前を探します。重複しているヘッダがある場合に便利です。
- [RETURN]
- 削除したヘッダとフィールドの組を返します。削除対象が見つからなかった場合は nil を返します。
require "csv" row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2"> row.delete("header1") row # => #<CSV::Row "header2":"row1_2">
require "csv" row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"]) row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2"> row.delete(0) row # => #<CSV::Row "header2":"row1_2">
require "csv" row = CSV::Row.new(["header1", "header2", "header1"], ["row1_1", "row1_2", "row1_3"]) row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2" "header1":"row1_3"> row.delete("header1", 1) row # => #<CSV::Row "header1":"row1_1" "header2":"row1_2">
[SEE_ALSO] CSV::Row#field
delete_if {|header, field| ... } -> self
[permalink][rdoc][edit]-
与えられたブロックにヘッダとフィールドのペアを渡して評価します。評価した結果が真である場合に、その組を自身から削除します。
- [RETURN]
- メソッドチェーンのために自身を返します。
require "csv" row = CSV::Row.new(["header1", "header2", "header3", "header4"], ["valid1", "valid2", "invalid", "valid4"]) row # => #<CSV::Row "header1":"valid1" "header2":"valid2" "header3":"invalid" "header4":"valid4"> row.delete_if { |header, field| field == "invalid" } row # => #<CSV::Row "header1":"valid1" "header2":"valid2" "header4":"valid4">
each {|header, field| ... } -> self
[permalink][rdoc][edit]-
与えられたブロックにヘッダとフィールドの組を渡して評価します。
- [RETURN]
- メソッドチェーンのために自身を返します。
require "csv" row = CSV::Row.new(["header1", "header2", "header3", "header4"], [1, 2, 3, 4]) row.each { |header, field| puts "#{header} - #{field}" } # => header1 - 1 # => header2 - 2 # => header3 - 3 # => header4 - 4
empty? -> bool
[permalink][rdoc][edit]-
内部で保持している @row へ委譲します。
field?(data) -> bool
[permalink][rdoc][edit]-
自身に与えられた値が含まれている場合は真を返します。そうでない場合は偽を返します。
- [PARAM] data:
- この行に含まれているかどうか調べたい値を指定します。
require "csv" row = CSV::Row.new(["header1", "header2", "header3", "header4"], [1, 2, 3, 4]) row.field?(1) # => true row.field?(5) # => false
field_row? -> bool
[permalink][rdoc][edit]-
フィールド行であれば真を返します。そうでなければ偽を返します。
require "csv" header_row = CSV::Row.new(["header1", "header2"], [], true) row = CSV::Row.new(["header1", "header2"], [1, 2]) header_row.field_row? # => false row.field_row? # => true
fields(*headers_and_or_indices) -> Array
[permalink][rdoc][edit]values_at(*headers_and_or_indices) -> Array
-
与えられた引数に対応する値の配列を返します。
要素の探索に CSV::Row#field を使用しています。
- [PARAM] headers_and_or_indices:
- ヘッダの名前かインデックスか Range のインスタンスか第 1 要素がヘッダの名前で第 2 要素がオフセットになっている 2 要素の配列をいくつでも指定します。混在することができます。
- [RETURN]
- 引数を与えなかった場合は全ての要素を返します。
require 'csv' csv = CSV.new("a,b,c\n1,2,3", headers: true) table = csv.read row = table.first row.values_at("a", 1, 2..3) # => ["1", "2", "3", nil]
header?(name) -> bool
[permalink][rdoc][edit]include?(name) -> bool
-
自身のヘッダに与えられた値が含まれている場合は真を返します。そうでない場合は偽を返します。
- [PARAM] name:
- この行のヘッダに含まれているかどうか調べたい値を指定します。
require "csv" row = CSV::Row.new(["header1", "header2"], [1, 2]) row.header?("header1") # => true row.header?("header3") # => false
header_row? -> bool
[permalink][rdoc][edit]-
ヘッダ行であれば真を返します。そうでなければ偽を返します。
require "csv" header_row = CSV::Row.new(["header1", "header2"], [], true) row = CSV::Row.new(["header1", "header2"], [1, 2]) header_row.header_row? # => true row.header_row? # => false
headers -> Array
[permalink][rdoc][edit]-
この行のヘッダのリストを返します。
require "csv" row = CSV::Row.new(["header1", "header2"], [1, 2]) row.headers # => ["header1", "header2"]
index(header, minimum_index = 0) -> Integer
[permalink][rdoc][edit]-
与えられたヘッダの名前に対応するインデックスを返します。
- [PARAM] header:
- ヘッダの名前を指定します。
- [PARAM] minimum_index:
- このインデックスより後で、ヘッダの名前を探します。重複しているヘッダがある場合に便利です。
require "csv" row = CSV::Row.new(["header1", "header2", "header1"], [1, 2, 3]) row.index("header1") # => 0 row.index("header1", 1) # => 2
[SEE_ALSO] CSV::Row#field
inspect -> String
[permalink][rdoc][edit]-
ASCII 互換であるエンコーディングの文字列で自身の情報を返します。
require "csv" row = CSV::Row.new(["header1", "header2", "header1"], [1, 2, 3]) row.inspect # => "#<CSV::Row \"header1\":1 \"header2\":2 \"header1\":3>"
length -> Integer
[permalink][rdoc][edit]size -> Integer
-
Array#length, Array#size に委譲します。
[SEE_ALSO] Array#size
push(*args) -> self
[permalink][rdoc][edit]-
複数のフィールドを追加するためのショートカットです。
以下とおなじです:
args.each { |arg| csv_row << arg }
- [RETURN]
- メソッドチェーンのために自身を返します。
to_csv -> String
[permalink][rdoc][edit]to_s -> String
-
自身を CSV な文字列として返します。ヘッダは使用しません。
require "csv" row = CSV::Row.new(["header1", "header2"], [1, 2]) row.to_csv # => "1,2\n" row.to_csv( {col_sep: "|", row_sep: "<br>"} ) # => "1|2<br>"
to_hash -> Hash
[permalink][rdoc][edit]-
自身をシンプルなハッシュに変換します。
フィールドの順序は無視されます。重複したフィールドは削除されます。
require "csv" row = CSV::Row.new(["header2", "header1", "header2"], [1, 2, 3]) row.to_hash # => {"header2"=>3, "header1"=>2}
protectedメソッド
row -> Array
[permalink][rdoc][edit]-
同値性を比較するために使用する内部的なデータです。