ruby - 如何检测 CSV (ruby) 中的最后一行

标签 ruby csv

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/

相关文章:

python - 使用特定于列的重复过滤器在 Python 中将行 append 到 CSV

python - 在 Python 中存储字符串的好方法是什么?

ruby-on-rails - add_dependency 和 add_runtime_dependency 之间的区别?

java - 是否可以从 JRuby 创建 Java 类并在 Java 中使用它们?

java - 使用 Groovy 重新映射 CSV 结构

windows - 如何计算 for/f 循环生成的 token 数量?

ruby - 如何将方法动态定义为私有(private)?

ruby - 使用 mechanize-ruby 提交登录表单时,我可以使用变量来表示字段名称吗?

ruby-on-rails - 在 Rails 中,Rspec 给出了无效的 css 错误,但该应用程序运行正常。如何解决这个问题?

sql - (Scala) 在 Apache Spark 中将字符串转换为日期