アレイ、ARモデルのインポートなどを解析しようとするとバグの多いCSVファイルを作成するのに共通の問題があると思われます。 MS Excelとsave as
毎日(十分ではない!)。レスキューCSV :: MalformedCsvError:行内の不正な引用n
外部から提供され、毎日更新される60,000行のcsvファイルに、エラー:CSV::MalformedCSVError: Illegal quoting in line 95.
(例として)があります。不正な行をスキップ/忘れてしまいました(つまり、1/60000番目の重要度しか持たない)。
最初の試みは、エラーをスキップするCSV.foreach
または同様、単にbegin
rescue
next
end
を使用することです。サイコロはありません。 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
サンプルライン? 95行目とそれを囲むことが素晴らしいでしょう。 –
私はちょうどあなたのコードを実行し、不正な行を無視し、他のすべてをmy_arrayにプッシュします。それはあなたが望むものではありませんか? –
シュート、@littlecegian、私の端末がエラーを投げたので、配列が行を受け入れていない(私は救助が正常に動作すると、エラーメッセージを受け取ったことがない)と思った!私は 'my_array.count'を実行したところ、59999個の文字列を持っていました。 – JHFirestarter