如何将自定义转换添加到ruby csv?

如何将自定义转换添加到ruby csv?,ruby,csv,Ruby,Csv,考虑如下所示的CSV文件。如果贷方/借方字段为空字符串,我想将其更改为0,然后进行一些处理 我提出的迂回方式似乎效率低下,因为我读取了csv文件,应用转换器,然后将其转换为csv::Table进行处理。有没有一种方法可以直接将转换器应用于解析方法 例如: csv_data = <<_ Description,Debit,Credit Eating Out,10,"" _ csv = CSV.new(csv_data, headers: true, converters: :integ

考虑如下所示的CSV文件。如果贷方/借方字段为空字符串,我想将其更改为0,然后进行一些处理

我提出的迂回方式似乎效率低下,因为我读取了csv文件,应用转换器,然后将其转换为csv::Table进行处理。有没有一种方法可以直接将转换器应用于解析方法

例如:

csv_data = <<_
Description,Debit,Credit
Eating Out,10,""
_
csv = CSV.new(csv_data, headers: true, converters: :integer)
csv.convert do |field, info|
    if info.index == 1
        field == "" ? 0 : field
    end
    if info.index == 2
        field == "" ? 0 : field
    end
end

table = CSV::Table.new(csv.to_a)  #Seems wrong to convert to array
puts table[0]['Debit']   #10
puts table[0]['Credit']  #0

csv_data=您可以将相同的选项传递给您可以传递给
new
,并且您可以传递一组转换器,这些转换器可以是其中一个内置转换器的名称,也可以是lambda:

table = CSV.parse(csv_data, headers: true, converters: [
  :integer,
  -> field, info { 'Credit' == info.header && field.empty? ? 0 : field },
  -> field, info { 'Debit' == info.header && field.empty? ? 0 : field },
])

p table # => #<CSV::Table mode:col_or_row row_count:2>
puts table[0]['Debit'] # => 10
puts table[0]['Credit'] # => 0
table=CSV.parse(CSV_数据,标题:true,转换器:[
:整数,
->字段,信息{'Credit'==info.header&&field.empty??0:field},
->字段,信息{'Debit'==info.header&&field.empty??0:field},
])
p表#=>#
将表[0]['Debit']#=>10放入
将表[0]['Credit']#=>0放入