计算每一行并添加到csv

时间:2017-01-25 15:42:05

标签: ruby

我想要做的是计算每行中@的数量,并将此值放入最后的总字段中。

我的意思是它有点工作,但它只增加了它所计算的最后一行的值。

我的Csv

Header,Header,Header
Info@,Info,Info
Info,Info@@,Info
Info,Info,Info@@@

我的代码

require "csv"
table = CSV.read("my_test.csv", {
  headers: true,
  col_sep: ","
})

File.readlines('my_test.csv').each do |line| 
  table.each do |row|
    at_count = line.count('@')
    row["Total"] = at_count
  end
end

CSV.open("my_test.csv", "w") do |f|
  f << table.headers
  table.each { | row | f << row }
end

当前结果

Header,Header,Header,Total
Info@,Info,Info,3
Info,Info@@,Info,3
Info,Info,Info@@@,3

1 个答案:

答案 0 :(得分:1)

您不需要File.readlines; CSV已经读过了。

require "csv"
table = CSV.read("test.csv", { headers: true}) #just shorter

table.each do |row |  #no readlines
  at_count = row.to_s.count('@')  # note the to_s
  row["Total"] = at_count
end


CSV.open("my_test.csv", "w") do |f |
  f << table.headers
  table.each { | row | f << row}
end