运行你的代码张贴:
$ 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'
未使用,没有必要解决这个问题发布
- 运行Ruby与-w选项和纠正警告
这样的说法:
new_mycsv.first << "SUM"
会连接"SUM"
到new_mycsv
的第一个元素,导致将数组更改为:
1,50000,10,SUM
2,40000,12
这样的说法:
new_mycsv[1..-1].each{|row| row << row.inject(:+)}
忽略第一行并连接东西,其他行,导致阵列更改为:
1,50000,10
2,40000,12,"[:id, 2, :numbers, 40000, :years, 12]"
这里是一个解决方案(我我不确定我是否已经很好地理解了什么not go past a certain number of points
的意思):
require 'csv'
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 { | row | row[:years].between?(10, 12) }
puts '---- new_mycsv'
puts new_mycsv
puts '---- selecting rows until the limit of numbers is reached'
numbers_limit = 100_000
sum_of_numbers = 0
mycsv_limited = []
new_mycsv.each do | row |
number = row[:numbers]
puts "row[:numbers]=#{number} sum_of_numbers=#{sum_of_numbers}"
break if sum_of_numbers + number >= numbers_limit
sum_of_numbers += number
puts "sum_of_numbers=#{sum_of_numbers}"
mycsv_limited << row
end
CSV.open("output.csv","w") do |out|
mycsv_limited.sort_by{ | row | row[:numbers] }.each { | row | out.puts row }
end
文件input.csv:
id, numbers, years,
1, 50000, 10
2, 40000, 12
3, 50000, 9
4, 50000, 11
5, 40000, 11
执行:
$ 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
文件output.csv:
2,40000,12
1,50000,10
这将是很好,如果你可以粘贴输入的预期输出你有。你的问题不清楚。 – AnkitG
我想添加“数字”一栏,基于“年” - 不包括来自“年”的数据,我不需要 – RDavids