我正在使用 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
有什么方法可以检查该行是否是最后一行?
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
smarter_csv
不进行预读,因此无法知道当前行是否是文件中的最后一行。
两种选择: