1

大きな (4.6GB) csv ファイルの列を別のファイルの値に置き換えようとしています。例えば:

| | ID | 名前 |

| | 01 | ジョン

| | ID | 住所 | 電話 |

| | 01 | 場所 | 番号

私が欲しいのは、一番下のテーブルの 01 を「ジョン」に置き換えることです。

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 ステートメントのある行です

4

2 に答える 2

1

問題はあなたの for ステートメント0ですprog.size0からに行きたいと思っていprog.size - 1ます。

undefined method '[]' for nil:NilClassである最後のインデックスの を取得していますprog.size

次のことを行ってください。

for i in 0..prog.size-1 
于 2013-07-16T21:52:50.713 に答える
0

反復ごとにrawisnilまたはprog[i]isかどうかを確認しますnil

于 2013-07-16T21:44:49.123 に答える