2013-07-16 74 views
0

我試圖用另一個文件中的值替換一個大的(4.6GB)csv文件中的列。例如:Ruby類型錯誤

| id |名稱|

| 01 |約翰

| id |地址|電話|

| 01 |放置|號碼

我想要的是底部表中的01用'john'替換。

new = CSV.open("usage_new.csv", "w") 
prog = CSV.read("programs.csv", encoding:"ASCII-8BIT") 

CSV.foreach("Usage-fixed.csv", encoding:"ASCII-8BIT") do |row| 
    for i in 0..prog.size 
     if row[5] == prog[i][0] 
      puts row[5] + " equals " + prog[i][1] 
      new << [ row[0] + row[1] + row[2] + row[3] + row[4] + prog[i][1] + row[5] + row[6] + row[7] + row[8] + row[9] + row[10] + row[11] + row[12] + row[13] + row[14] + row[15] + row[16] + row[17] ] 
     end 
    end 
end 

的問題是我不斷收到以下錯誤:

blah.rb:11:in `block (2 levels) in <main>': undefined method `[]' for nil:NilClass (NoMethodError) 
    from blah.rb:10:in `each' 
    from blah.rb:10:in `block in <main>' 
    from /home/mastelj/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/csv.rb:1717:in `each' 
    from /home/mastelj/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/csv.rb:1120:in `block in foreach' 
    from /home/mastelj/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/csv.rb:1266:in `open' 
    from /home/mastelj/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/csv.rb:1119:in `foreach' 
    from blah.rb:9:in `<main>' 

什麼可能導致這樣的任何想法?

編輯:11號線(違規線)與IFF聲明

回答

1

的問題是該行你的說法,你會從0prog.size。你想從0prog.size - 1

你得到undefined method '[]' for nil:NilClass的最後一個索引是prog.size

請執行下列操作:

for i in 0..prog.size-1 
+0

好了,好了,我是個白癡。謝謝。 – Jacobm001

0

檢查rawnilprog[i]nil每一個迭代