Ruby 没有将nil隐式转换为字符串错误

Ruby 没有将nil隐式转换为字符串错误,ruby,implicit-conversion,Ruby,Implicit Conversion,我有一个ruby脚本,它将通过从另一个文件中获取并合并值来创建两个文件 #Resources require 'rubygems' require 'csv' col_date = [] col_constant1 = [] col_constant2 = [] col_appYear = [] col_statsDesc = [] col_keyStats =[] col_weeklyTotal=[] weekly_total = [] fname = "finalStats.csv"

我有一个ruby脚本,它将通过从另一个文件中获取并合并值来创建两个文件

#Resources
require 'rubygems'
require 'csv'

col_date = []
col_constant1 = []
col_constant2 = []
col_appYear = []
col_statsDesc = []
col_keyStats =[]
col_weeklyTotal=[]


weekly_total = []

fname = "finalStats.csv" #variable for capture file
        finalStatsFile = File.open(fname, "w") #write to capture file
fname2 = "weeklyStats.csv"
        weeklyStatsFile = File.open(fname2, "w")    
CSV.foreach('compareData.csv', converters: :numeric) do |row|
    weekly_total << row[0] - row[1]

    weekly_total.each do |data| 
    data << weekly_total.shift 
     weeklyStatsFile.puts data
end 
end

#retrieve stats from original document 
 CSV.foreach("autoCapture.csv") {|row| col_date << row[0]}
 CSV.foreach("autoCapture.csv") {|row| col_constant1 << row[1]}
 CSV.foreach("autoCapture.csv") {|row| col_appYear << row[2]}
 CSV.foreach("autoCapture.csv") {|row| col_statsDesc << row[3]}
 CSV.foreach("autoCapture.csv") {|row| col_constant2 << row[4]}
 CSV.foreach("autoCapture.csv") {|row| col_keyStats << row[5]}
 CSV.foreach("weeklyStats.csv") {|row| col_weeklyTotal << row[0]}



  col_date.zip(col_constant1, col_appYear, col_statsDesc, col_constant2, col_keyStats, col_weeklyTotal).each do |col_date, col_constant1, col_appYear, col_statsDesc, col_constant2, 
  col_keyStats, col_weeklyTotal|

  finalStatsFile.puts col_date+", "+col_constant1+", "+ col_appYear+", "+col_statsDesc+", "+col_constant2+", "+col_keyStats+", "+col_weeklyTotal

 end
#资源
需要“rubygems”
需要“csv”
col_date=[]
col_constant1=[]
col_constant2=[]
col_appYear=[]
col_statsDesc=[]
col_keyStats=[]
col_weeklyTotal=[]
每周_总计=[]
fname=“finalStats.csv”#捕获文件的变量
finalStatsFile=File.open(fname,“w”)#写入捕获文件
fname2=“weeklyStats.csv”
weeklyStatsFile=File.open(fname2,“w”)
CSV.foreach('compareData.CSV',converters::numeric)do |行|
每周_总计字符串中的一个(或多个)值

finalStatsFile.puts col_date+", "+col_constant1+", "+ col_appYear+", "+col_statsDesc+", "+col_constant2+", "+col_keyStats+", "+col_weeklyTotal
变为
nil
。要修复输出,应将其显式转换为字符串:

finalStatsFile.puts col_date.to_s + ", " + 
                    col_constant1.to_s + ", " + 
                    col_appYear.to_s + ", " + 
                    col_statsDesc.to_s + ", " +
                    col_constant2.to_s + ", " +
                    col_keyStats.to_s + ", " + 
                    col_weeklyTotal.to_s 
顺便说一句,整个条款可能会被改写成更鲁莽的方式:

finalStatsFile.puts [ col_date,
                      col_constant1,
                      col_appYear,
                      col_statsDesc,
                      col_constant2,
                      col_keyStats,
                      col_weeklyTotal ].map(&:to_s).join(', ')

从第42行的“col|U weeklyTotal”
中删除拖尾条。感谢您回复我。不幸的是,这不起作用,我想我需要它|来封装与collectionAh关联的变量(在本例中是数组),对不起,我没有意识到它们是前面字符串的一部分。然后简单地从上一行删除回车。我只是把回车放在屏幕上截取代码,抱歉忘了把它拿出来!请不要理会我上面的评论。请参阅下面的答案。我认为您关于nil值的看法是正确的,但不幸的是,.to_s阻止了错误的发生,但该列仍然没有写入文件。我感觉这个问题可以用+nil.to_的显式转换来解决,但我在.puts中尝试了这个方法,但仍然不起作用。我还将每周总计改为CSV.foreach('compareData.CSV',converters::numeric)do | row | weekly | u总计嘿,谢谢,我现在已经解决了这个问题。.to_最后起作用了,只是我先把变量weekly_total放在一个单独的文件中,然后试图读回值。我这样做是因为我不知道最初如何转换为字符串,我认为这样可以解决这个问题。不管怎样,一旦我扔掉了另一份文件,你的答案就奏效了。干杯您还可以在阵列上使用
.compact
删除任何零:
[…].compact.join(',')
finalStatsFile.puts [ col_date,
                      col_constant1,
                      col_appYear,
                      col_statsDesc,
                      col_constant2,
                      col_keyStats,
                      col_weeklyTotal ].map(&:to_s).join(', ')