1

ルビー 1.8.7 、レール 2.3.8 を使用しています。タブで区切られたTXTダンプファイルからデータを解析したい。

この TXT ダンプには、無効なデータがあるように見えるいくつかの CSS プロパティが含まれています。

ここに画像の説明を入力

FasterCSV gem を使用してコードを実行すると

  FasterCSV.foreach(txt_file, :quote_char => '"',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row|
  col= row.to_s.split(/\t/)
  puts col[15]
  end

コンソールに「Illegal quoteing on line 38」と書かれたエラー。無効なデータを含む行をスキップし、残りの行のデータロードプロセスを続行する方法を教えてもらえますか?

4

3 に答える 3

3

これを行う1つの方法を次に示します。を使用shiftして各行を解析し、MalformedCSVError例外を黙らせて、次の反復に進みます。これの問題は、ループが見栄えがよくないことです。誰かがこれを改善できる場合は、コードを編集してください。

FasterCSV.open(filename, :quote_char => '"', :col_sep => "\t", :headers => true) do |csv|
  row = true
  while row
    begin
      row = csv.shift
      break unless row

      # Do things with the row here...
    rescue FasterCSV::MalformedCSVError
      next
    end
  end
end
于 2011-07-01T06:35:41.740 に答える
1

ファイルを(FasterCSVではなく)通常のファイルとして読み取り、知っているように分割するだけで機能\tするはずです

于 2011-07-01T04:40:34.930 に答える
1

問題は、TSV ファイルに引用符がないことです。仕様では、データにタブを含めることが許可されていないことを単に指定しています。

CSV ライブラリは、このユース ケースを実際にはサポートしていません。データに表示されないことがわかっている引用文字を指定することで、これを回避しました。例えば

CSV.parse(txt_file, :quote_char => '☎', :col_sep => "\t" do |row|
   puts row[15] 
end
于 2012-03-12T04:00:47.607 に答える