Wie entferne ich eine Zeile aus einer CSV mit Ruby
Wie würden Sie in der folgenden CSV-Datei alle Zeilen entfernen, die das Wort 'true' in der Spalte 'foo' enthalten?
Date,foo,bar
2014/10/31,true,derp
2014/10/31,false,derp
Ich habe eine funktionierende Lösung, allerdings muss ein sekundäres CSV-Objekt erstellt werden.csv_no_foo
@csv = CSV.read(@csvfile, headers: true) #http://bit.ly/1mSlqfA
@headers = CSV.open(@csvfile,'r', :headers => true).read.headers
# Make a new CSV
@csv_no_foo = CSV.new(@headers)
@csv.each do |row|
# puts row[5]
if row[@headersHash['foo']] == 'false'
@csv_no_foo.add_row(row)
else
puts "not pushing row #{row}"
end
end
Ideally, ich würde nur die beleidigende Zeile aus der CSV entfernen, wie folgt:
...
if row[@headersHash['foo']] == 'false'
@csv.delete(true) #Doesn't work
...
Betrachtet man die Ruby-Dokumentation, sieht es aus wie dasrow
Klasse hat eindelete_if
Funktion. Ich bin verwirrt über die Syntax, die diese Funktion erfordert. Gibt es eine Möglichkeit, die Zeile zu entfernen, ohne ein neues CSV-Objekt zu erstellen?
http: //ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Row.html#method-i-eac