在RUBY CSV中-如何对1列已排序的CSV数据求和,并确保保持对数据的约束或限制

在RUBY CSV中-如何对1列已排序的CSV数据求和,并确保保持对数据的约束或限制,ruby,csv,Ruby,Csv,我正在开发一个csv阅读器,希望对数据进行操作,我想对一列进行求和-年,但确保不超过一定数量的点-比如100万。我无法对列求和,它正在递增。我的限制是10年以上 csv看起来像这样 id, numbers, years, 1, 50000, 10 2, 40000, 12 3, 50000, 9 我的ruby文件如下所示 #!/usr/bin/env ruby require 'pry' require 'rubygems' require 'fastercsv' mycsv = CS

我正在开发一个csv阅读器,希望对数据进行操作,我想对一列进行求和-年,但确保不超过一定数量的点-比如100万。我无法对列求和,它正在递增。我的限制是10年以上

csv看起来像这样

id, numbers, years,
1, 50000, 10
2, 40000, 12  
3, 50000, 9
我的ruby文件如下所示

#!/usr/bin/env ruby

require 'pry'
require 'rubygems'
require 'fastercsv'

mycsv = CSV.read('input.csv', headers:true, col_sep: ', ', header_converters: :symbol, converters: :integer) # read the entire file into a 'loans' variable


new_mycsv = mycsv.find_all do |p|
 p[:years].between?(10, 12)
end

puts new_mycsv.inspect

#Sum csv data on first row
new_mycsv.first << "SUM"


new_mycsv[1..-1].each{|row| row << row.inject(:+)}

CSV.open("output.csv","w") do |out|
    new_mycsv.sort_by { |row| each do |row| }
   p out << row
 end
end

按发布的方式运行代码:

$ ruby -w t_op.rb 
t_op.rb:23: warning: shadowing outer local variable - row
t_op.rb:23: syntax error, unexpected '}'
    new_mycsv.sort_by { |row| each do |row| }
                                             ^
t_op.rb:26: syntax error, unexpected keyword_end, expecting '}'
对代码的一些注释:

发布无错误代码,以便我们可以复制粘贴并处理它 只发布回答问题所需的代码。比如说

require 'pry'
是未使用的,并且不是解决问题所必需的

使用-w选项运行ruby并更正所有警告 本声明:

new_mycsv.first << "SUM"
new_mycsv[1..-1].each{|row| row << row.inject(:+)}
本声明:

new_mycsv.first << "SUM"
new_mycsv[1..-1].each{|row| row << row.inject(:+)}
这里有一个解决方案,我不确定我是否已经很好地理解了不超过一定数量的分数意味着什么:

执行:

$ ruby -w t.rb 
---- new_mycsv
1,50000,10
2,40000,12
4,50000,11
5,40000,11
---- selecting rows until the limit of numbers is reached
row[:numbers]=50000  sum_of_numbers=0
sum_of_numbers=50000
row[:numbers]=40000  sum_of_numbers=50000
sum_of_numbers=90000
row[:numbers]=50000  sum_of_numbers=90000
文件输出.csv:

2,40000,12
1,50000,10

如果您可以粘贴您所拥有的输入的预期输出,这将是一件好事。你的问题不清楚。我想根据年份添加列数——不包括我不需要的年份数据
$ ruby -w t.rb 
---- new_mycsv
1,50000,10
2,40000,12
4,50000,11
5,40000,11
---- selecting rows until the limit of numbers is reached
row[:numbers]=50000  sum_of_numbers=0
sum_of_numbers=50000
row[:numbers]=40000  sum_of_numbers=50000
sum_of_numbers=90000
row[:numbers]=50000  sum_of_numbers=90000
2,40000,12
1,50000,10