2012-03-07 15 views
13

私はruby 1.9.2を使用しています。私のCSVファイルは次のようになります。csvで特定の行を見つける方法

NAME, Id, No, Dept 
Tom,  1, 12, CS 
Hendry, 2, 35, EC 
Bahamas, 3, 21, IT 
Frank, 4, 61, EE 

私は特定の行say( 'Tom')を印刷したいと思います。私はいろいろ試しましたが、正確な結果は見つかりませんでした。最も推奨されるオプションは "Fastercsv"です。しかし、それは私のバージョンにも当てはまります。また、私はcsvが列を賢明にフィールドを印刷することに気づいた。 csvを使って行全体を印刷するにはどうすればいいですか?

require 'csv' 

csv_text = File.read('sampler.csv') 
csv = CSV.parse(csv_text, :headers => true) 
csv.each do |row| 
puts "#{row[:NAME]},#{row[:Id]},#{row[:No]},#{row[:Dept]}" 
end 

答えて

15
puts csv.find {|row| row['NAME'] == 'Tom'} 
+0

ありがとうございました!これはこの文脈では 'csv'が配列の配列であるために機能します。配列は 'Enumerable'モジュールを含み、' Enumerable'は 'find'メソッドを提供します。 – sealocal

2

を次のように私のRubyのコードがある。ここのCSV API内のコードを保持し、別のアプローチがあります。

csv_tableCSV::Table
rowあるCSV::Row
row_with_specified_nameCSV::Rowです。

csv_table = CSV.table("./tables/example.csv", converters: :all) 
row_with_specified_name = csv_table.find do |row| 
    row.field(:name) == 'Bahamas' 
end 

p row_with_specified_name.to_csv.chomp #=> "Bahamas,3,21,IT" 
+0

'未定義のローカル変数またはメソッド' row_with_specified_name''があります – inquisitive

+0

変数の代入を忘れました。私の答えの更新されたコードサンプルを参照してください。 – sealocal

関連する問題