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


Ruby CSV.convert用法及代码示例


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

用法

convert(converter_name) → array_of_procs
convert {|field, field_info| ... } → array_of_procs
  • 没有块,安装一个现场转换器(Proc)。

  • 使用块,定义并安装自定义字段转换器。

  • 返回已安装字段转换器的数组。

  • 参数 converter_name 如果给定,应该是现有字段转换器的名称。

请参阅现场转换器。

没有块,安装一个现场转换器:

csv = CSV.new('')
csv.convert(:integer)
csv.convert(:float)
csv.convert(:date)
csv.converters # => [:integer, :float, :date]

如果给定,则为每个字段调用该块:

  • 参数field 是字段值。

  • 参数 field_info 是一个 CSV::FieldInfo 对象,其中包含有关该字段的详细信息。

此处的示例假定事先执行:

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

给出块的示例:

csv = CSV.open(path)
csv.convert {|field, field_info| p [field, field_info]; field.upcase }
csv.read # => [["FOO", "0"], ["BAR", "1"], ["BAZ", "2"]]

输出:

["foo", #<struct CSV::FieldInfo index=0, line=1, header=nil>]
["0", #<struct CSV::FieldInfo index=1, line=1, header=nil>]
["bar", #<struct CSV::FieldInfo index=0, line=2, header=nil>]
["1", #<struct CSV::FieldInfo index=1, line=2, header=nil>]
["baz", #<struct CSV::FieldInfo index=0, line=3, header=nil>]
["2", #<struct CSV::FieldInfo index=1, line=3, header=nil>]

该块不需要返回 String 对象:

csv = CSV.open(path)
csv.convert {|field, field_info| field.to_sym }
csv.read # => [[:foo, :"0"], [:bar, :"1"], [:baz, :"2"]]

如果给出converter_name,则不调用该块:

csv = CSV.open(path)
csv.convert(:integer) {|field, field_info| fail 'Cannot happen' }
csv.read # => [["foo", 0], ["bar", 1], ["baz", 2]]

如果 converter_name 不是内置字段转换器的名称,则引发 parse-time 异常:

csv = CSV.open(path)
csv.convert(:nosuch) => [nil]
# Raises NoMethodError (undefined method `arity' for nil:NilClass)
csv.read

相关用法


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