私はFasterCSVを使用しており、このような foreach でループしています
FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|
しかし、問題は、私のcsvがヘッダーとして最初の3行を持っていることです.CSVが最初の3行だけではなく最初の3行をスキップするようにする方法はありますか??
私はFasterCSVを使用しており、このような foreach でループしています
FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|
しかし、問題は、私のcsvがヘッダーとして最初の3行を持っていることです.CSVが最初の3行だけではなく最初の3行をスキップするようにする方法はありますか??
FasterCSVについてはわかりませんが、Ruby 1.9標準のCSVライブラリ(FasterCSVから作成されたもの)では、次のようなことができます:
c = CSV.open '/path/to/my.csv'
c.drop(3).each do |row|
# do whatever with row
end
私は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
ムラデン・ヤブラノビッチに感謝します。手がかりは得られた..しかし、興味深いことに気がついた.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ćの答えが好きですが、これも興味深い論理です。