作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑如下所示的 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/
我是一名优秀的程序员,十分优秀!