本文简要介绍ruby语言中 CSV::Table.table[n]
的用法。
用法
table[n] → row
table[range] → array_of_rows
table[header] → array_of_fields
从表中返回数据;不修改表。
表达式 table[n]
,其中 n
是一个非负整数,如果该行存在并且访问模式为 :row
或 :col_or_row
,则返回表的第 +n+ 行:
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_row! # => #<CSV::Table mode:row row_count:4>
table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
table[1] # => #<CSV::Row "Name":"bar" "Value":"1">
如果 n
为负数,则从最后一行倒数:
table[-1] # => #<CSV::Row "Name":"baz" "Value":"2">
如果 n
太大或太小,则返回 nil
:
table[4] # => nil
table[-4] => nil
如果访问模式是 :row
并且 n
不是 Integer-convertible object ,则引发异常。
table.by_row! # => #<CSV::Table mode:row row_count:4>
# Raises TypeError (no implicit conversion of String into Integer):
table['Name']
表达式 table[range]
(其中 range
是 Range
对象)从表中返回行,从行 range.first
开始,如果这些行存在,并且访问模式是 :row
或 :col_or_row
:
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_row! # => #<CSV::Table mode:row row_count:4>
rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
rows = table[1..2] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
如果行数太少,则从range.first
到最后返回所有行:
rows = table[1..50] # => #<CSV::Row "Name":"bar" "Value":"1">
rows # => [#<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
特殊情况:如果 range.start == table.size
,返回一个空数组:
table[table.size..50] # => []
如果range.end
为负数,则从末尾计算结束索引:
rows = table[0..-1]
rows # => [#<CSV::Row "Name":"foo" "Value":"0">, #<CSV::Row "Name":"bar" "Value":"1">, #<CSV::Row "Name":"baz" "Value":"2">]
如果range.start
为负数,则从末尾计算起始索引:
rows = table[-1..2]
rows # => [#<CSV::Row "Name":"baz" "Value":"2">]
如果 range.start
大于 table.size
,则返回 nil
:
table[4..4] # => nil
如果列存在且访问模式为 :col
或 :col_or_row
,则表达式 table[header]
(其中 header
是字符串)返回列值(字符串数组):
source = "Name,Value\nfoo,0\nbar,1\nbaz,2\n"
table = CSV.parse(source, headers: true)
table.by_col! # => #<CSV::Table mode:col row_count:4>
table['Name'] # => ["foo", "bar", "baz"]
table.by_col_or_row! # => #<CSV::Table mode:col_or_row row_count:4>
col = table['Name']
col # => ["foo", "bar", "baz"]
修改返回的列值不会修改表:
col[0] = 'bat'
col # => ["bat", "bar", "baz"]
table['Name'] # => ["foo", "bar", "baz"]
如果没有这样的列,则返回 nil
值的数组:
table['Nosuch'] # => [nil, nil, nil]
相关用法
- Ruby Table.table << row_or_array用法及代码示例
- Ruby Table.delete用法及代码示例
- Ruby Table.values_at用法及代码示例
- Ruby Table.==用法及代码示例
- Ruby Table.each用法及代码示例
- Ruby Table.push用法及代码示例
- Ruby Table.delete_if用法及代码示例
- Ruby Task类用法及代码示例
- Ruby Time tv_sec用法及代码示例
- Ruby Time usec用法及代码示例
- Ruby TCPServer.accept用法及代码示例
- Ruby Time yday()用法及代码示例
- Ruby Time succ()用法及代码示例
- Ruby Time mon()用法及代码示例
- Ruby Time.gmtime用法及代码示例
- Ruby Time iso8601用法及代码示例
- Ruby Time.at用法及代码示例
- Ruby Thread.kill用法及代码示例
- Ruby Time.utc_offset用法及代码示例
- Ruby Time.isdst用法及代码示例
- Ruby TracePoint.defined_class用法及代码示例
- Ruby Time.time + numeric用法及代码示例
- Ruby Thread.pending_interrupt?用法及代码示例
- Ruby Time wednesday?用法及代码示例
- Ruby Time.wednesday?用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Table.table[n]。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。