gpt4 book ai didi

ruby 1.9 CSV : selectively ignoring conversions for a column

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:11 25 4
gpt4 key购买 nike

我有以下 CSV 数据:

10,11,12.34

我可以使用标准库中的 CSV 对其进行解析,并将值从字符串转换为数字:

require 'csv'
CSV.parse( "10,11,12.34" )
=> [["10", "11", "12.34"]]
CSV.parse( "10,11,12.34", {:converters => [:integer,:integer,:float]} )
=> [[10, 11, 12.34]]

不想转换第 1 列,我希望将其保留为字符串。我的猜测是我可以从转换器数组中省略一个值,但这没有用:

CSV.parse( "10,11,12.34", {:converters => [nil,:integer,:float]} )
NoMethodError: undefined method `arity' for nil:NilClass
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:2188:in `convert_fields'
from org/jruby/RubyArray.java:1614:in `each'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:2187:in `convert_fields'
from org/jruby/RubyArray.java:2332:in `collect'
from org/jruby/RubyEnumerator.java:190:in `each'
from org/jruby/RubyEnumerator.java:404:in `with_index'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:2186:in `convert_fields'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:1923:in `shift'
from org/jruby/RubyKernel.java:1408:in `loop'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:1825:in `shift'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:1767:in `each'
from org/jruby/RubyEnumerable.java:391:in `to_a'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:1778:in `read'
from /home/ian/.rvm/rubies/jruby-1.6.6/lib/ruby/1.9/csv.rb:1365:in `parse'
from (irb):25:in `evaluate'

事实上,我还没有找到任何方法来指定我希望第一列不被转换。有什么建议吗?


更新

我想我误解了 :converters 的设计意图。它不是按列的 1:1 映射,而是要应用于(我认为)所有值的转换器列表。我不确定,文档不太清楚。所以更普遍的问题是:如何转换我的 CSV 中的某些列,而不是其他列?

最佳答案

documentation说这些选项不是按列指定的,而是将应用于所有列的转换器列表。

例子:

CSV.parse("10,11,13,12.34", { :converters => [lambda{|s|s.to_s + 'x'}] })
# => [["10x", "11x", "13x", "12.34x"]]

由于 CSV 模块急于转换它可以转换的所有内容,您也可以使用 .to_s 或使用 :unconverted_fields 选项来保存任何列原始值并允许访问它们。

关于 ruby 1.9 CSV : selectively ignoring conversions for a column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398781/

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