test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。
以下コードの抜粋です。
48 res = Array.new
49 resp.each do |row|
50 puts row.class, row if $debug == 1
51 res = row
52 end
53 p res, res[0], res[1],res.class
54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then
55 res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
56 if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then
以下略・・・という箇所でのエラーなのですが、
53行のデバグ表示では
["13/03/06-17:52:00"]
"13/03/06-17:52:00"
nil
Array
このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが
入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが
冒頭のエラーで止まってしまいます。ところが、検証用に
res = Array.new; res = ["13/03/06-17:52:00"]
p res, res[0], res[1],res.class
res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
p res
以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には
"2013-03-06 17:52:00"
となり、うまい具合に期待通りの出力が返ってきます。
同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか?
もちろん実行環境は同一です。
すいません、自己解決しました。
738 :
736:2013/04/03(水) 20:11:30.24
自己解決してません
いたずらする人がいるようなのでトリップ付けて再掲します。万が一自己解決したら
このトリップ付きで再度その旨投稿します。
test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。
以下コードの抜粋です。
48 res = Array.new
49 resp.each do |row|
50 puts row.class, row if $debug == 1
51 res = row
52 end
53 p res, res[0], res[1],res.class
54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then
55 res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
56 if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then
以下略・・・という箇所でのエラーなのですが、
53行のデバグ表示では
["13/03/06-17:52:00"]
"13/03/06-17:52:00"
nil
Array
このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが
入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが
冒頭のエラーで止まってしまいます。ところが、検証用に
res = Array.new; res = ["13/03/06-17:52:00"]
p res, res[0], res[1],res.class
res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-')
p res
以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には
"2013-03-06 17:52:00"
となり、うまい具合に期待通りの出力が返ってきます。
同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか?
もちろん実行環境は同一です。