2016-05-17 33 views
2

アレイ、ARモデルのインポートなどを解析しようとするとバグの多いCSVファイルを作成するのに共通の問題があると思われます。 MS Excelとsave as毎日(十分ではない!)。レスキューCSV :: MalformedCsvError:行内の不正な引用n

外部から提供され、毎日更新される60,000行のcsvファイルに、エラー:CSV::MalformedCSVError: Illegal quoting in line 95.(例として)があります。不正な行をスキップ/忘れてしまいました(つまり、1/60000番目の重要度しか持たない)。

最初の試みは、エラーをスキップするCSV.foreachまたは同様、単にbeginrescuenextendを使用することです。サイコロはありません。 CSV.read Illegal quoting in line x(つまり、「自分でファイルを読んでください」 - 私はこれを試してみたと思います)。

そして、このSO Q & A(How can I further process the line of data that causes the Ruby FasterCSV library to throw a MalformedCSVError?)は約束を持っているようだが、受け入れられた答えは...かなり...私の一見似たようなケースでの作業rakeタスクを介して実行、(たとえば、わかりやすくするために変更)しません。

file_path = "filename.csv" 
my_array = [] 

File.open(file_path).each do |line| # `foreach` instead of `open..each` does the same 
    begin  
    CSV.parse(line) do |row| 
     my_array << row 
    end 
    rescue CSV::MalformedCSVError => er 
    puts er.message 
    counter += 1 
    next 
    end 
    counter += 1 
    puts "#{counter} read success" 
end 

出力=>

1 read success 
2 read success 
... 
94 read success 
Illegal quoting in line 1 # strange that it says `line 1` vs `95`, which may be the crux of what I do not understand here (e.g. some kind of look ahead error) 
96 read success 
... 
60000 read success 
    # I checked using `line.inspect`, and the 60000th row is indeed being read/inspected 
rake aborted! 

CSV:MalformedCSVError: Illegal quoting in line 95 
+0

サンプルライン? 95行目とそれを囲むことが素晴らしいでしょう。 –

+0

私はちょうどあなたのコードを実行し、不正な行を無視し、他のすべてをmy_arrayにプッシュします。それはあなたが望むものではありませんか? –

+0

シュート、@littlecegian、私の端末がエラーを投げたので、配列が行を受け入れていない(私は救助が正常に動作すると、エラーメッセージを受け取ったことがない)と思った!私は 'my_array.count'を実行したところ、59999個の文字列を持っていました。 – JHFirestarter

答えて

1

あなたのソリューションは、動作します。期待される結果は変数my_arrayにあります。

関連する問題