gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:38:30 24 4
gpt4 key购买 nike

考虑如下所示的 CSV 文件。如果它们是空字符串,我想将 Credit/Debit 字段更改为 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

最佳答案

您可以将相同的选项传递给 parse您可以将其传递给 new,并使用 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

关于ruby - 如何将自定义转换添加到 ruby​​ csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397185/

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