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

时间:2011-09-07 15:59:25

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems fastercsv

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

感谢Mladen Jablanovic。我得到了线索......但我意识到有趣的事情 在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行开始。

以这种方式读取文件是完全合理的。然后它只需要在内存中有当前行。

我仍然喜欢MladenJablanović的回答,但这也是一个有趣的逻辑。