Como remover uma linha de um CSV com Ruby
Dado o seguinte arquivo CSV, como você removeria todas as linhas que contêm a palavra 'true' na coluna 'foo'?
Date,foo,bar
2014/10/31,true,derp
2014/10/31,false,derp
Eu tenho uma solução funcional, no entanto, é necessário criar um objeto CSV secundáriocsv_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
Idealmente, eu apenas removeria a linha incorreta do CSV da seguinte maneira:
...
if row[@headersHash['foo']] == 'false'
@csv.delete(true) #Doesn't work
...
Olhando para a documentação do ruby, parece que orow
classe tem umdelete_if
função. Estou confuso com a sintaxe que essa função requer. Existe uma maneira de remover a linha sem criar um novo objeto csv?
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Row.html#method-i-each