[解決済み] nil から String への暗黙の変換ができないエラー
2022-02-11 11:30:26
質問
私は、別のファイルから値を取ってマージすることによって2つのファイルを作成する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
あるファイルで、row[1] の値から row[0] の値を引いて、新しい 'weekly_total' という値を作成したいと思います。そして、この値の配列をweeklyStats.csvと呼ばれるファイルに出力します。これでうまく値の列が出力されます。
しかし、これらの値を別のファイル (autoCapture.csv) の別のセットと結合したいのですが、これらを配列として zip し、対応する行で読み込むようにしようとすると、エラーが発生します。
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>'
これは、配列zipは値の1つがnilの場合、例外をキャッチしないので、文字列に変換できないことを意味すると思います。問題は、weekly_totalを文字列や配列に変換してみたのですが、これが問題(型の不一致)かもしれないと思い、ここからどうすればいいのかわかりません。どなたか助けていただけませんか?
解決方法は?
文字列の中の1つ(またはそれ以上)の値
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
ちなみに、この節全体は、もっとruby的な方法で書き直せるかもしれません。
finalStatsFile.puts [ col_date,
col_constant1,
col_appYear,
col_statsDesc,
col_constant2,
col_keyStats,
col_weeklyTotal ].map(&:to_s).join(', ')
関連
-
[解決済み】そのようなファイルやディレクトリはありません @ rb_sysopen ruby
-
[解決済み】macOSでrbenvをアンインストールする方法とは?
-
[解決済み] ルビーオールウェイズ ラウンドアップ
-
[解決済み] Rubyでnil値をマッピングして削除する方法
-
[解決済み] Rubyでランダムな文字列を生成する方法
-
[解決済み] Gem::Specification.reset中に未解決のスペックがある。
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Objective-Cの暗黙の変換で整数精度の「NSUInteger」(別名「unsigned long」)が「int」に変換されなくなる警告
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rubyで数値の配列の合計を出すには?
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] RubyのHashをキーでアルファベット順にソートする方法
-
[解決済み] RubyのFile.openで "No such file or directory - text.txt (Errno::ENOENT)" というエラーが発生する。
-
[解決済み] Rubyのコロン演算子とは何ですか?
-
[解決済み] 文字列の文字をアルファベット順に並べるには?
-
[解決済み] Ruby on Railsでホスト名やIPを取得する
-
[解決済み] Ruby の `print` から bash スクリプトを呼び出して echo するにはどうしたらいいですか?
-
[解決済み] ファイルの存在を確認する方法 [重複]について
-
[解決済み] Rubyにバイナリ検索は組み込まれていますか?