2012-03-07 13 views
13

में एक विशिष्ट पंक्ति को कैसे ढूंढें मैं रूबी 1.9.2 का उपयोग कर रहा हूं। मेरी सीएसवी फ़ाइल निम्नानुसार है ..,सीएसवी

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

मैं एक विशिष्ट पंक्ति ('टॉम') प्रिंट करना चाहता हूं। मैंने कई तरीकों से कोशिश की, लेकिन मुझे सही परिणाम नहीं मिला। सबसे अधिक अनुशंसित विकल्प "Fastercsv" है। लेकिन यह मेरे संस्करण के लिए लागू है। साथ ही, मैंने देखा कि सीएसवी क्षेत्र को कॉलम के रूप में प्रिंट करता है। रेल में सीएसवी का उपयोग कर एक पूरी पंक्ति कैसे मुद्रित करें। मेरे गहरे लाल रंग का कोड के रूप में

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' सरणी की एक सरणी है। Arrays में 'संख्यात्मक' मॉड्यूल शामिल है, और 'संख्यात्मक' 'find' विधि प्रदान करता है। – sealocal

2

इस प्रकार यहाँ एक और दृष्टिकोण है कि सीएसवी एपीआई के भीतर कोड रहता है।

csv_table एक CSV::Table
row एक CSV::Row
row_with_specified_name एक 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

यह कहता है 'अपरिभाषित स्थानीय चर या विधि' – inquisitive

+0

row_with_specified_name'' मैं चर काम भूल गया। मेरे उत्तर में अद्यतन कोड नमूना देखें। – sealocal