给定以下 CSV 文件,如何删除“foo”列中包含单词“true”的所有行?
Date,foo,bar
2014/10/31,true,derp
2014/10/31,false,derp
我有一个可行的解决方案,但它需要创建一个辅助 CSV 对象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
理想情况下,我会从 CSV 中删除有问题的行,如下所示:
...
if row[@headersHash['foo']] == 'false'
@csv.delete(true) #Doesn't work
...
查看 ruby 文档,它看起来像row
类有一个delete_if
功能。我对该函数所需的语法感到困惑。有没有办法在不创建新的 csv 对象的情况下删除行?
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Row.html#method-i-each