J'ai un script Ruby qui va créer deux fichiers en prenant et en fusionnant les valeurs d'un autre fichier.
#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
Dans un fichier, je souhaite soustraire les valeurs de la ligne [1] des valeurs de la ligne [0] pour créer une nouvelle valeur 'hebdomadaire_total'. Je produis ensuite ce tableau de valeurs dans un fichier appelé hebdomadaireStats.csv. Cela affichera une colonne de valeurs très bien.
Cependant, je veux joindre ces valeurs avec un autre ensemble d'un autre fichier (autoCapture.csv) et lorsque j'essaie de les compresser en tant que tableaux afin qu'ils lisent les lignes correspondantes, j'obtiens l'erreur:
weeklyStats_csv.rb:42:in `+': no implicit conversion of nil into String (TypeError)
from weeklyStats_csv.rb:42:in `block in <main>'
from weeklyStats_csv.rb:40:in `each'
from weeklyStats_csv.rb:40:in `<main>'
Je suppose que cela signifie que le tableau Zip n'attrapera pas d'exception si l'une des valeurs est nulle et ne peut donc pas être convertie en chaîne. Le problème est que j'ai essayé de convertir hebdomadaire_total en chaîne et tableau car je pensais que c'était peut-être le problème (une incompatibilité de types) mais je ne sais pas où aller à partir d'ici. Quelqu'un peut-il aider?
Une (ou plusieurs) valeurs dans la chaîne
finalStatsFile.puts col_date+", "+col_constant1+", "+ col_appYear+", "+col_statsDesc+", "+col_constant2+", "+col_keyStats+", "+col_weeklyTotal
est devenu nil
. Pour corriger la sortie, vous devez explicitement les convertir en chaînes:
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
BTW, la clause entière pourrait être réécrite de manière plus rubis:
finalStatsFile.puts [ col_date,
col_constant1,
col_appYear,
col_statsDesc,
col_constant2,
col_keyStats,
col_weeklyTotal ].map(&:to_s).join(', ')