9

私はでいくつかのテストを行っていますCSV.table。小さくてほぼ同じCSVファイルが2つありますが、1つにはヘッダー行がありません。

CSV.tableヘッダー行のあるCSVファイルに対して実行すると、すべてが期待どおりに機能します。

ヘッダー行のないCSVファイルに対して実行すると、次のようになります。

NoMethodError: undefined method `encode' for nil:NilClass

さまざまな種類のデータ、さまざまな種類のヘッダーでこれを試したところ、同じ結果が得られました。

の魔法に興味がありCSV.tableます。ヘッダーをtrueに設定して使用するCSV.parseと、何があっても常に最初の行がヘッダーになります。そのため、インポートするCSVファイルにヘッダー行があるかどうかを確認するために使用していますが、使用している方法CSV.tableで機能するかどうか、いつ機能するかがわからないため、あまり快適ではありません。

begin
  CSV.table(csv_file_path)
rescue
  # Add error to log or something.
end

誰か知っている?

PS私はすでにこれとそれが各メソッドで提供するソースコードを読みました-http ://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

4

1 に答える 1

9

魔法は関係なく、一般的には機能しません。

ソースからわかるように、table文字通り。で呼び出すだけreadですheaders: true。ただし、ヘッダーを記号(header_converters: :symbol)に変換することもあり、これが機能しているように見える理由の鍵となります。

データの最初の行に空白の列があるため、ヘッダーがないとエラーが発生します(のようなものa,b,,d,e)。空白はとして読み込まれnilnilシンボルに変換できないため、爆発します。

最初の行に空白がないデータで試してみてくださいtable。他の方法と同じように、そのデータ行がヘッダーとして扱われることがわかります。

于 2012-10-06T22:16:18.293 に答える