gpt4 book ai didi

ruby - 你如何使用 Ruby CSV 转换器?

转载 作者:数据小太阳 更新时间:2023-10-29 06:40:36 27 4
gpt4 key购买 nike

假设您有以下文件:

textfield,datetimefield,numfield
foo,2008-07-01 17:50:55.004688,1
bar,2008-07-02 17:50:55.004688,2

读取 .csv 的 Ruby 代码类似于:

#!/usr/bin/env ruby

require 'csv'

csv = CSV($stdin, :headers => true, :converters => :all)
csv.each do |row|
print "#{row}"
the_date = row['datetimefield'].to_date
end

该代码给出了这个错误信息:

./foo2.rb:8:in `block in <main>': undefined method `to_date' for "2008-07-01 17:50:55.004688":String (NoMethodError)

什么给了?

我读过 the docs , 但我不明白。

编辑:是的,我可以单独解析字段。这个问题的重点是我想学习如何使用记录的转换器功能。

最佳答案

你问的是如何使用转换器。

我的例子定义了一个新转换器 mytime 的用法。如果可能,转换器 my_time 会尝试构建一个时间对象。

#Define test data
src = <<csv
textfield,datetimefield,numfield
foo,2008-07-01 17:50:55.004688,1
bar,2008-07-02 17:50:55.004688,2
csv

require 'csv'
require 'time'
CSV::Converters[:mytime] = lambda{|s|
begin
Time.parse(s)
rescue ArgumentError
s
end
}

csv = CSV(src, :headers => true, :converters => [:mytime])
csv.each do |row|
print "#{row}"
the_date = row['datetimefield'].to_date
end

使用这种技术,您还可以定义一个转换器来从类似时间的字符串创建日期。此解决方案还保留所有其他转换器。

#define test data
src = <<csv
textfield,datetimefield,numfield
foo,2008-07-01 17:50:55.004688,1
bar,2008-07-02 17:50:55.004688,2
csv

require 'csv'
require 'time'
CSV::Converters[:time2date] = lambda{|s|
begin
Time.parse(s).to_date
rescue ArgumentError
s
end
}

csv = CSV(src, :headers => true, :converters => CSV::Converters.keys + [:time2date])
csv.each do |row|
print "#{row}"
p row['datetimefield'] #Date-field
end

关于ruby - 你如何使用 Ruby CSV 转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8903649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com