5

私はFasterCSVを使用しており、このような foreach でループしています

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

しかし、問題は、私のcsvがヘッダーとして最初の3行を持っていることです.CSVが最初の3行だけではなく最初の3行をスキップするようにする方法はありますか??

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

ログには 3 つの異なる結果が表示されます。3 つのヘッダー行のそれぞれに 1 つ。
c.each do |row| #now は 4 行目から始まるようです。

このようにファイルを読み取ることは完全に理にかなっています。次に、現在の行をメモリに保持するだけで済みます。

私はまだMladen Jablanovićの答えが好きですが、これも興味深い論理です。

于 2012-05-28T23:48:22.127 に答える