Ho uno script ruby che creerà due file prendendo e unendo i valori di un altro file.nessuna conversione implicita di nil nell'errore di stringa
#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
In un file desidero sottrarre i valori nella riga [1] dai valori nella riga [0] per creare un nuovo valore 'weekly_total'. Quindi, emetto questa matrice di valori in un file chiamato weeklyStats.csv. Questo produrrà una colonna di valori fini.
Tuttavia, voglio unire questi valori con un altro set da un altro file (autoCapture.csv) e quando provo a zip loro come gli array in modo che leggono tutto in righe corrispondenti ottengo l'errore:
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>'
Questo significa che l'array zip non cattura un'eccezione se uno dei valori è nullo e quindi non può essere convertito in stringa. Il problema è che ho provato a convertire settiman_total in stringa e array come pensavo che potesse essere il problema (una mancata corrispondenza di tipi) ma non so dove andare da qui. Qualcuno può aiutare?
Rimuovere la barra posteriore da 'col_weeklyTotal |' in linea 42. – mudasobwa
Grazie per essere tornato da me. Sfortunatamente non ha funzionato, penso di averne bisogno | per racchiudere le variabili (in questo caso le matrici) associate alla collezione –
Ah, scusa, non mi sono reso conto che quelle fanno parte della stringa precedente. Quindi rimuovere semplicemente il ritorno a capo dalla riga precedente. – mudasobwa