Rails - 使用 smarter_csv gem 时检查最后一行的方法

问题描述 投票:0回答:2

我正在使用 smarter_csv gem 来解析 Heroku 上的 large CSV 文件。

SmarterCSV.process(file_name, { chunk_size: 10, headers_in_file: false, user_provided_headers: user_provided_headers }) do |chunk|
  chunk.each do |row|
    # parse row
  end
end

有什么方法可以检查该行是否是最后一行?

ruby-on-rails ruby csv file rubygems
2个回答
0
投票

SmarterCSV 似乎对此没有任何实用性,所以我认为唯一的方法是在处理之前和处理过程中计算行数:

line_count = `wc -l < file_name`.to_i
lines_processed = 0
SmarterCSV.process(file_name, { chunk_size: 10, headers_in_file: false, user_provided_headers: user_provided_headers }) do |chunk|
  chunk.each do |row|
    lines_processed += 1
    return if lines_processed == line_count
    # parse row
  end
end


0
投票

smarter_csv
不进行预读,因此无法知道当前行是否是文件中的最后一行。

两种选择:

  • 延迟处理当前行,直到读取下一行
  • 或者提前数数行数,然后识别最后一行。
© www.soinside.com 2019 - 2024. All rights reserved.