我正在使用FasterCSV并且我正在使用这样的 foreach 循环
FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|
但问题是我的 csv 有前 3 行作为标题...有什么方法可以让 fasterCSV 跳过前三行而不是第一行?
我正在使用FasterCSV并且我正在使用这样的 foreach 循环
FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|
但问题是我的 csv 有前 3 行作为标题...有什么方法可以让 fasterCSV 跳过前三行而不是第一行?
不确定 FasterCSV,但在 Ruby 1.9 标准 CSV 库(由 FasterCSV 制成)中,我可以执行以下操作:
c = CSV.open '/path/to/my.csv'
c.drop(3).each do |row|
# do whatever with row
end
我不是 FasterCSV 的用户,但为什么不自己进行控制:
additional_rows_to_skip = 2
FasterCSV.foreach("...", :encoding => 'u', :headers => :first_row) do |row|
if additional_rows_to_skip > 0
additional_rows_to_skip -= 1
else
# do stuff...
end
end
感谢姆拉登·贾布拉诺维奇。我得到了我的线索.. 但我意识到一些有趣的事情在 1.9 中,阅读似乎来自 POS。我的意思是如果你这样做
c = CSV.open iFileName
logger.debug c.first
logger.debug c.first
logger.debug c.first
您将在日志中获得三个不同的结果。三个标题行中的每一个。
c.each do |row|
#now 似乎从第 4 行开始。
以这种方式读取文件是完全合理的。然后它只需要在内存中有当前行。
我仍然喜欢 Mladen Jablanović 的回答,但这也是一个有趣的逻辑。