data = IO::read(file).scrub("")
CSV.parse(data, {:col_sep => "\t", :headers => headers, :quote_char => '_'}) do |row|
# how to detect last line of CSV?
end
我有一个巨大的 CSV 文件需要清理。它有多行适用于一个数据库对象。在我的代码中,我收集了适用于一个对象的所有行,然后将它们传递给将处理它们的类。
如果我能检测到 CSV 中的最后一行,那将非常有帮助,这样我就可以确保发送最后一个集合。
最佳答案
这是一个基于搜索的解决方案。这针对较大的文件进行了优化。无论文件大小如何,打印 CSV 的最后一行都只需要一点时间:
#!/usr/bin/env ruby
require 'csv'
f = File.open('test.csv')
f.seek(-2, IO::SEEK_END) #pos -1 is newline at end of file
last_line = nil
while f.pos > 0
if f.getc == "\n"
last_line = f.read
break
else
f.pos -= 2 #getc advances position by 1
end
end
row = CSV.parse_line(last_line.scrub(""), col_sep: "\t")
p row
f.close
关于ruby - 如何检测 CSV (ruby) 中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611916/