2016-06-01 9 views
1

したがって、私はRubyでCSVファイルを使いこなしていました。私のテストでは、ヘッダー行のみを含むファイルのx = CSV.read(file、headers:true)の呼び出しは、配列に変換されたときに[[]]を返し、x .headersは[]を返します。私はreturn_headersをtrueに設定することでこの問題を回避することができますが、実際にはファイルがヘッダーを返すようにはしません。 x.headersが実際にヘッダーを返し、return_headersをtrueに設定する必要はありません。ルビーのヘッダー行だけを含むCSVファイルのCSV.readからヘッダーを取得する方法

問題を視覚化するための行を追加する前後のコードです。真、return_headers:CSVファイルの真のみヘッダ行と:ヘッダーのみで

a = CSV.read("June.csv", headers:true, return_headers:true) # <CSV::Table mode:col_or_row row_count:1> 
a[0] # <CSV::Row "Day":"Day" "Time":"Time"> 
a.headers # => ["Day", "Time"] 

b = CSV.read("June.csv", headers:true) #<CSV::Table mode:col_or_row row_count:1> 
b[0] # => nil 
b.headers # => [] 
:CSVファイルの真のみヘッダ行とヘッダを

真のcsvファイルに偽の二行目と::

c = CSV.read("June.csv", headers:true) #<CSV::Table mode:col_or_row row_count:2> 
c.headers # => ["Day", "Time"] 
c["Day"] # => ["6/1"] 

私はCに依存することはできませんヘッダーだけで

SVファイル私のプログラムはそれを上に構築しようとしているので、私は常に2番目の行を持っている必要があります。私は間違って何をしていますか?これは意図された動作ですか、何らかの形でセットアップの問題ですか?私はヘッダーのためだけに読書をしなければなりません、そして私が望む振る舞いを得るために別の読書をしなければなりませんか?私はしばらくの間探しましたが、まだ問題があります

答えて

2

あなたが経験している動作は期待されています。 2年前にやや類似した質問にはanswer that pointed out the same issueがありました。その人はbug report for Rubyを開き、そこでRubyの開発者が応答し、それを拒否しました。そして、技術的には整形式のCSVではない人々によると、

ただし、あなたとそのバグを開いた人に同意します。 headers: trueオプションは、実際に次の行にデータがあるかどうかにかかわらず、CSV.headersに記入する必要があります。現在の動作は困惑しているようで、コード内のバグにつながるだけです。

問題の速やかな修正として、私はただreturn_headers: trueを渡し、慎重に結果の最初の項目をスキップします。これは常にヘッダー行になります。

+1

ありがとうございました。これは事実ではないと私は自分自身でバグレポートを発見していないことは申し訳なく思っていた。私はスタックで何かを実行する前に、私自身の問題を自分で解決しようとしますが、これは私が暮らしていなければならないものです。再度、感謝します!!! –

関連する問題