Ich schreibe ein Filterprogramm, liest eine CSV-Datei mit Adressdaten und schließt Zeilen aus, die in einem Crescent (Cres), Avenue (Ave) oder Ort (Pl) befinden.Chaning Ruby Regexp-Operatoren
Hier einige Beispiel-Eingang:
data = <<CSV
ID,Street address,Town,Valuation date,Value
1,1 Northburn RD,WANAKA,1/1/2015,280000
2,1 Mount Ida PL,WANAKA,1/1/2015,280000
3,1 Mount Linton AVE,WANAKA,1/1/2015,780000
4,1 Centre CRES,WANAKA,1/1/2015,295000
CSV
require 'csv'
elements = []
CSV.parse(data, headers: true, header_converters: :symbol) do |row|
elements << row.to_h
end
elements
#=> [
# {:id=>"1", :street_address=>"1 Northburn RD", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"280000"},
# {:id=>"2", :street_address=>"1 Mount Ida PL", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"280000"},
# {:id=>"3", :street_address=>"1 Mount Linton AVE", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"780000"},
# {:id=>"4", :street_address=>"1 Centre CRES", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"295000"}
# ]
ich einfache reguläre Ausdrücke für eine der drei filtern können, dh /pl/
, /cres/
und /ave/
, aber ich kann sie &&
nicht Kette mit: (noch tun sie funktionieren, wenn ich sie in drei separate „Filter“ aufgespalten)
elements.select { |e| e[:street_address].downcase! !~ /pl/ && e[:street_address].downcase! !~ /cres/ && e[:street_address].downcase! !~ /ave/ }
#=> [
# {:id=>"1", :street_address=>"1 northburn rd", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"280000"},
# {:id=>"3", :street_address=>"1 mount linton ave", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"780000"},
# {:id=>"4", :street_address=>"1 centre cres", :town=>"WANAKA", :valuation_date=>"1/1/2015", :value=>"295000"}
# ]
Dieser filtert Eintrag # 2 wie erwartet, aber nicht # 3 und # 4.
Irgendwelche Ideen, was ich vermisse?
Ist der Code der CSV-Datei zu Ihrer Frage zu lesen? (Sie sollten übrigens die [CSV] (http://ruby-doc.org/stdlib-2.3.1/libdoc/csv/rdoc/CSV.html) Bibliothek von Ruby verwenden. – Stefan
Nein, es funktioniert nicht . Nur der Filter Teil ist zwielichtig, aber ich dachte, ich würde alles für den Fall enthalten :) Ich werde auch in die CSV-Bibliothek schauen! –
Es ist normalerweise besser, Code zu schreiben, den andere nur kopieren und einfügen können. Könnten Sie einige Beispieldaten für "Elemente" und die erwartete Ausgabe hinzufügen? – Stefan