如何控制Ruby CSV使用的输出格式



我希望能够在生成CSV输出时更改CSV使用的日期和时间格式。例如,我希望它生成" 1/30/2004"。

,而不是生成" 2004-1-30"。

我该怎么做?

这是一个完整的示例:

require 'csv'
require 'date'
str = <<_
2004-1-30,foo
2004-11-20,bar
_
File.write('a',str)
CSV::Converters[:cdate] = lambda do |s|
  begin
  Date.strptime(s,"%Y-%m-%d").strftime("%-m/%d/%Y")
  rescue ArgumentError
    s
  end
end
CSV.foreach('a',:converters => :cdate) do |row|
  p row
end
# >> ["1/30/2004", "foo"]
# >> ["11/20/2004", "bar"]

查看Converters的文档。

来自转换器Hash和/或lambdas的名称数组自定义转换单个转换器不必在数组中。所有内置转换器在转换之前尝试将其转码字段到UTF-8。如果数据无法转码,则转换将失败,而将字段保持不变。

最新更新