Ruby CSV を使用して 1 列を抽出する
概要
私は CSV ファイルから単一の列を取得しようとしています。
http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html のドキュメントを読みました。 しかし、まだ使い方がよくわかりません。
CSV.table を使用すると、CSV.read に比べて応答が非常に遅くなります。ロードしているデータセットが非常に大きいことは認めますが、それがまさにそこから 1 つの列だけを取得したい理由です。
私のリクエストは現在次のようになります
@dataTable = CSV.table('path_to_csv.csv')
デバッグすると、次の応答が得られます
#<CSV::Table mode:col_or_row row_count:2104 >
ドキュメントには by_col() を使用できるはずだと書かれていますが、出力しようとすると
<%= debug @dataTable.by_col('col_name or index') %>
「未定義メソッド ‘col’ エラー」が表示されます
誰かが CSV をどのように使用するかを説明してもらえますか? 「table」の代わりに「read」を使用して列をより速く取得する方法があるかどうか?
私は Ruby 1.92 を使用していますが、これは FasterCSV を使用していると記載されているため、FasterCSV gem を使用する必要はありません。
解決策
CSV から列を取り出すには、おそらく次のようなことを行うでしょう。
col_data = []
CSV.foreach(FILENAME) {|row| col_data << row[COL_INDEX]}
これは、CSV.Table に対するどの操作よりも大幅に高速になるはずです。