2
[sagar@BL-53 RcTools]$ irb
1.9.3p0 :001 > require 'csv'
 => true
1.9.3p0 :002 > master = CSV.read("./public/jobs/in/Appexchange_Applications_Companies_487.csv")
ArgumentError: invalid byte sequence in UTF-8
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1855:in `sub!'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1855:in `block in shift'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1849:in `loop'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1849:in `shift'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1791:in `each'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1805:in `to_a'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1805:in `read'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1411:in `block in read'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1354:in `open'
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/csv.rb:1411:in `read'
        from (irb):2
        from /home/sagar/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
1.9.3p0 :003 >

しかし、私がするとき

1.9.3p0 :003 > master = CSV.open("./public/jobs/in/Appexchange_Applications_Companies_487.csv","r")
 => <#CSV io_type:File io_path:"./public/jobs/in/Appexchange_Applications_Companies_487.csv" encoding:UTF-8 lineno:0 col_sep:"," row_sep:"\r\n" quote_char:"\"">
1.9.3p0 :004 >

なぜこれが起こっているのか、そして解決策は何かを知りたいだけです。そして、そのcsvの配列を返すので、csvを読みたいです。したがって、最初の方法でファイルを読み取った場合

master = CSV.read("./public/jobs/in/Appexchange_Applications_Companies_487.csv")

それは私に配列を返します

1.9.3p0 :008 > master.class
 => Array

しかし、2 番目のケースでは、クラスは CSV です。最初の方法で csv を読み取るための解決策は何ですか。

4

1 に答える 1

0

エラーについて: まず、正しい文字エンコーディングを使用していることを確認してください。その場合、csv ファイルに無効なデータが含まれている可能性があります。おそらく iconv を使用して修正できます (Chetan Muneshwar が投稿したリンクを参照)。

質問の 2 番目の部分について:CSV.openファイルを読み取り用に開くだけですが、まだ読み取りは行いません。CSV.readファイルを開き、その内容を読み取り、再度閉じます。したがって、ファイルからデータを取得するには、CSV.read.

于 2012-08-14T15:23:10.177 に答える