我如何跳过前三行而不是FasterCSV中的第一行

Mat*_*iby 5 ruby rubygems ruby-on-rails fastercsv ruby-on-rails-3

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

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

但问题是我的csv有前3行作为标题...任何方法使quickCSV跳过前三行而不是只有第一行?

Mla*_*vić 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
Run Code Online (Sandbox Code Playgroud)

  • @Tamer:`c`不是一个数组,但````类包含`Enumerable`模块,它自动引入一堆方法,`drop`就是其中之一.http://www.ruby-doc.org/core/classes/Enumerable.html#M001520 (3认同)

Joa*_*iro 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
Run Code Online (Sandbox Code Playgroud)

  • @daveatflow:实际上,`drop`也必须在内部使用计数器.此外,`drop`返回一个数组,这可能并不总是令人满意(例如,如果与大文件一起使用).所以,这个解决方案没有任何问题(除了不优雅),当然不值得投票.干杯. (4认同)