2012-03-07 16 views
13

Estoy usando ruby ​​1.9.2. Mi archivo csv es el siguiente ...,Cómo encontrar una fila específica en csv

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

Quiero imprimir una fila específica say ('Tom'). Probé de muchas maneras, pero no encontré el resultado exacto. La opción más recomendada es "Fastercsv". Pero es aplicable para mi versión. Además, noté que csv imprime el campo como una columna sabia. Cómo imprimir una fila completa utilizando csv en rieles. Mi código de rubí es el siguiente

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 

Respuesta

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

¡Gracias! Esto funciona porque en este contexto, 'csv' es una matriz de matrices. Las matrices tienen el módulo 'Enumerable' incluido, y' Enumerable' proporciona el método 'find'. – sealocal

2

Aquí hay otro enfoque que mantiene el código dentro de la API de CSV.

csv_table es una CSV::Table
row es una CSV::Row
row_with_specified_name es una CSV::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

dice 'variable local indefinida o método' row_with_specified_name'' – inquisitive

+0

Olvidé la asignación de variable. Vea la muestra del código actualizado en mi respuesta. – sealocal

Cuestiones relacionadas