У меня есть следующие данные 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, а не другие?