当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby CSV.parse用法及代码示例


本文简要介绍ruby语言中 CSV.parse 的用法。

用法

parse(string) → array_of_arrays
parse(io) → array_of_arrays
parse(string, headers: ..., **options) → csv_table
parse(io, headers: ..., **options) → csv_table
parse(string, **options) {|row| ... }
parse(io, **options) {|row| ... }

使用指定的 options 解析 stringio

  • 参数string 应该是一个字符串对象;它将被放入位于开头的新 StringIO 对象中。

  • 参数 io 应该是一个 IO 对象,即:

    • 开放阅读;返回时, IO 对象将被关闭。

    • 定位在开头。要定位在末尾,要追加,请使用方法 CSV.generate 。对于任何其他定位,请改为传递预设的 StringIO 对象。

  • 参数 options :请参阅解析选项

没有选项headers

没有 {option headers } 的情况。

这些示例假定事先执行:

string = "foo,0\nbar,1\nbaz,2\n"
path = 't.csv'
File.write(path, string)

在没有给出块的情况下,返回从源形成的数组数组。

解析字符串:

a_of_a = CSV.parse(string)
a_of_a # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

解析打开的文件:

a_of_a = File.open(path) do |file|
  CSV.parse(file)
end
a_of_a # => [["foo", "0"], ["bar", "1"], ["baz", "2"]]

给定一个块,调用每个已解析行的块:

解析字符串:

CSV.parse(string) {|row| p row }

输出:

["foo", "0"]
["bar", "1"]
["baz", "2"]

解析打开的文件:

File.open(path) do |file|
  CSV.parse(file) {|row| p row }
end

输出:

["foo", "0"]
["bar", "1"]
["baz", "2"]
使用选项headers

对于 {option headers } 情况。

这些示例假定事先执行:

string = "Name,Count\nfoo,0\nbar,1\nbaz,2\n"
path = 't.csv'
File.write(path, string)

在没有给出块的情况下,返回从源形成的 CSV::Table 对象。

解析字符串:

csv_table = CSV.parse(string, headers: ['Name', 'Count'])
csv_table # => #<CSV::Table mode:col_or_row row_count:5>

解析打开的文件:

csv_table = File.open(path) do |file|
  CSV.parse(file, headers: ['Name', 'Count'])
end
csv_table # => #<CSV::Table mode:col_or_row row_count:4>

在给定块的情况下,使用每个已解析的行调用该块,该行已形成 CSV::Row 对象:

解析字符串:

CSV.parse(string, headers: ['Name', 'Count']) {|row| p row }

输出:

# <CSV::Row "Name":"foo" "Count":"0">
# <CSV::Row "Name":"bar" "Count":"1">
# <CSV::Row "Name":"baz" "Count":"2">

解析打开的文件:

File.open(path) do |file|
  CSV.parse(file, headers: ['Name', 'Count']) {|row| p row }
end

输出:

# <CSV::Row "Name":"foo" "Count":"0">
# <CSV::Row "Name":"bar" "Count":"1">
# <CSV::Row "Name":"baz" "Count":"2">

如果参数不是 String 对象或 IO 对象,则引发异常:

# Raises NoMethodError (undefined method `close' for :foo:Symbol)
CSV.parse(:foo)

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 CSV.parse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。