开发者

How do i skip over the first three rows instead of the only the first in FasterCSV

I am using FasterCSV and i am looping wit开发者_JAVA技巧h a foreach like this

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

but the problem is my csv has the first 3 lines as the headers...any way to make fasterCSV skip the first three rows rather then only the first??


Not sure about FasterCSV, but in Ruby 1.9 standard CSV library (which is made from FasterCSV), I can do something like:

c = CSV.open '/path/to/my.csv'
c.drop(3).each do |row|
  # do whatever with row
end


I'm not a user of FasterCSV, but why not do the control yourself:

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


Thanks to Mladen Jablanovic. I got my clue.. But I realized something interesting In 1.9, reading seems to be from POS. In this I mean if you do

c = CSV.open iFileName
logger.debug c.first
logger.debug c.first
logger.debug c.first

You'll get three different results in your log. One for each of the three header rows.
c.each do |row| #now seems to start on the 4th row.

It makes perfect sense that it would read the file this way. Then it would only have to have the current row in memory.

I still like Mladen Jablanovićs answer, but this is an interesting bit of logic too.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜