5

我正在使用FasterCSV并且我正在使用这样的 foreach 循环

FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|

但问题是我的 csv 有前 3 行作为标题...有什么方法可以让 fasterCSV 跳过前三行而不是第一行?

4

3 回答 3

19

不确定 FasterCSV,但在 Ruby 1.9 标准 CSV 库(由 FasterCSV 制成)中,我可以执行以下操作:

c = CSV.open '/path/to/my.csv'
c.drop(3).each do |row|
  # do whatever with row
end
于 2011-09-07T16:59:19.457 回答
5

我不是 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
于 2011-09-07T16:05:37.407 回答
0

感谢姆拉登·贾布拉诺维奇。我得到了我的线索.. 但我意识到一些有趣的事情在 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ć 的回答,但这也是一个有趣的逻辑。

于 2012-05-28T23:48:22.127 回答