extend: Forwardable
CSV::Row は配列やハッシュのように似ています。
配列のようにフィールドの順序を保持していて、複製する事もできます。また、ハッシュのように名前でフィールドにアクセスする事もできます。
ヘッダ行の処理が有効である場合は CSV から返される全ての行はこのクラスのインスタンスです。
以下のメソッドを Array に委譲します。
new(headers, fields, header_row = false) -> CSV::Row
[permalink][rdoc]自身を初期化します。
一方の配列が他方の配列よりも短い場合、不足しているところは nil になります。
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]自身に与えられたデータを追加します。
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]自身が other と同じヘッダやフィールドを持つ場合に真を返します。そうでない場合は偽を返します。
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]self[header_or_index, minimum_index = 0] -> object | nil
ヘッダの名前かインデックスで値を取得します。フィールドが見つからなかった場合は nil を返します。
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]ヘッダの名前かインデックスでフィールドを探し、値をセットします。
末尾より後ろのインデックスを指定すると、ヘッダの名前は nil になります。存在しないヘッダを指定すると、新しい要素を末尾に追加します。
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]ヘッダの名前でフィールドを探し、値をセットします。
[SEE_ALSO] CSV::Row#field
delete(header_or_index, minimum_index = 0) -> [object, object] | nil
[permalink][rdoc]ヘッダの名前かインデックスで行からフィールドを削除するために使用します。
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]与えられたブロックにヘッダとフィールドのペアを渡して評価します。評価した結果が真である場合に、その組を自身から削除します。
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]与えられたブロックにヘッダとフィールドの組を渡して評価します。
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]内部で保持している @row へ委譲します。
field?(data) -> bool
[permalink][rdoc]自身に与えられた値が含まれている場合は真を返します。そうでない場合は偽を返します。
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]フィールド行であれば真を返します。そうでなければ偽を返します。
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]values_at(*headers_and_or_indices) -> Array
与えられた引数に対応する値の配列を返します。
要素の探索に CSV::Row.field を使用しています。
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]include?(name) -> bool
自身のヘッダに与えられた値が含まれている場合は真を返します。そうでない場合は偽を返します。
require "csv"
row = CSV::Row.new(["header1", "header2"], [1, 2])
row.header?("header1") # => true
row.header?("header3") # => false
header_row? -> bool
[permalink][rdoc]ヘッダ行であれば真を返します。そうでなければ偽を返します。
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]この行のヘッダのリストを返します。
require "csv"
row = CSV::Row.new(["header1", "header2"], [1, 2])
row.headers # => ["header1", "header2"]
index(header, minimum_index = 0) -> Integer
[permalink][rdoc]与えられたヘッダの名前に対応するインデックスを返します。
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]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]size -> Integer
Array#length, Array#size に委譲します。
[SEE_ALSO] Array#size
push(*args) -> self
[permalink][rdoc]複数のフィールドを追加するためのショートカットです。
以下とおなじです:
args.each { |arg| csv_row << arg }
row -> Array
[permalink][rdoc]同値性を比較するために使用する内部的なデータです。
to_csv -> String
[permalink][rdoc]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]自身をシンプルなハッシュに変換します。
フィールドの順序は無視されます。重複したフィールドは削除されます。
require "csv"
row = CSV::Row.new(["header2", "header1", "header2"], [1, 2, 3])
row.to_hash # => {"header2"=>3, "header1"=>2}