2017-05-12 10 views
-2

CSV-Datei Ich habe 1000 Dateien in einem Verzeichnis. Ich möchte alle CSV-Dateien in diesem Verzeichnis aufrufen und if Bedingung ausführen. Wenn die Bedingung erfüllt, sollte es drucken name sonst sollte es drucken "nothing"kann Hash nicht in Integer konvertieren (TypeError)

Beispiel csv:

name,id,address,country,food 
A,11,bcvhcbdc,india,biryani 

...

require "csv" 

path="/logs/*exception_evaluation_summary.csv" 

#calling csv files in the directory 
Dir.glob(path).each do |f| 
    #reading csv files 
    csv = CSV.read(f, :headers=>true, :encoding => "bom|utf-8") 

    csv.each do |record| 
    if (record['id'] != 0 && record['country']=="india" && record['food']=="biryani") 
     print record[name] 
    else 
     print "nothing" 
    end 
    end 
end 
+0

Ich bin neu zu Rubin. kann jemand mir dabei helfen – user1656716

Antwort

0

Ihr Fehler ist in print record[name], ändern Sie ihn auf print record['name'] und Sie sollten in Ordnung:

csv.each do |record| 
    if (record['id'] != 0 && record['country']=="india" && record['food']=="biryani") 
    print record['name'] 
    else 
    print "nothing" 
    end 
end 
+0

Danke Gerry, aber immer noch den Fehler /usr/lib/ruby/1.8/csv.rb:98:in 'lesen ': kann Hash nicht in Integer konvertieren (TypeError) \t von/usr/lib/ruby ​​/ 1.8/csv.rb: 98: in 'lesen ' \t von calling.rb: 7 \t von calling.rb: 6: in' jeder' \t von calling.rb: 6 – user1656716

+0

@ user1656716 Der Fehler sagt einfach, dass Sie in dieser Zeile (98) einen 'Hash' verwenden, wenn ein' Integer' erwartet wird. Können Sie Ihren 'csv.rb' Code um die Zeile' 98' und Ihren 'calling.rb' Code teilen? – Gerry