class CSV::Row

[edit]

extend: Forwardable

要約

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

配列のようにフィールドの順序を保持していて、複製する事もできます。また、ハッシュのように名前でフィールドにアクセスする事もできます。

ヘッダ行の処理が有効である場合は CSV から返される全ての行はこのクラスのインスタンスです。

以下のメソッドを Array に委譲します。

目次

特異メソッド
インスタンスメソッド
protectedメソッド

継承しているメソッド

Enumerableから継承しているメソッド

特異メソッド

new(headers, fields, header_row = false) -> CSV::Row[permalink][rdoc][edit]

自身を初期化します。

一方の配列が他方の配列よりも短い場合、不足しているところは nil になります。

[PARAM] headers:
ヘッダの配列を指定します。
[PARAM] fields:
フィールドの配列を指定します。
[PARAM] header_row:
ヘッダ行である場合は真を指定します。そうでない場合は偽を指定します。デフォルトは偽です。
例 header_row = true のケース

require "csv"

header = CSV::Row.new(["header1", "header2"], [], header_row: true)
table = CSV::Table.new([header])
table.to_a # => [["header1", "header2"]]
例 header_row = false のケース

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]
メソッドチェーンのために自身を返します。
例 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"]]
例 Hash を指定

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"
例 ヘッダの index で指定

require "csv"

row = CSV::Row.new(["header1", "header2"], ["row1_1", "row1_2"])

row["header1"]  # => "row1_1"
row[0] = "updated"
row["header1"]  # => "updated"
例 ヘッダの名前と offset で指定

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">
例 ヘッダの index で指定

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">
例 ヘッダの名前と offset で指定

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]

同値性を比較するために使用する内部的なデータです。