2014-09-24 104 views
1

我有一個文件,第一行是無用的行,第二行是一個標題。問題是,當我循環遍歷文件時,它會計數這些行。有沒有辦法使用foreach的選項跳過2行?我知道在CSV上有一個read方法,但是將數據加載到RAM中,如果文件太大,我認爲它不會很好地擴展。Ruby CSV:如何跳過文件的前兩行?

但是,如果沒有其他選擇,我會考慮它。這是我到目前爲止有:

CSV.foreach(filename, col_sep: "\t") do |row| 
    until listings.size == limit 
    listing_class = 'Sale' 
    address = row[7] 
    unit = row[8] 
    price = row[2] 
    url = row[0] 
    listings << {listing_class: listing_class, address: address, unit: unit, url: url, price: price} 
    end 
end 
+0

您可以提供預期的CSV輸入和輸出嗎? – 2014-09-24 16:34:29

回答

4

我沒有基準,但試試這個:

CSV.to_enum(:foreach, filename, col_sep: "\t").drop(2).each do |row| 
1

使用計數器變種,它初始化爲0,並在每行增加,所以如果它小於2,那麼你可以跳到下一行。

+0

我也在別處看到過這個解決方案。我想它會做 – Edmund 2014-09-24 16:38:11

0

您還可以使用#read#readlines像這樣

CSV.readlines(filename, col_sep: "\t")[2..-1] do |row| 

#readlines#read的別名所以沒關係,你使用,但它將CSV拆分成一個數組Array,因此[2 ..- 1]表示在結尾使用第3行。

這和@Nakilon的答案都可能比使用計數器更好,也更清晰。

一如既往的Ruby類有很好的文檔記錄,閱讀Docs可以比等待某人向您提供答案更有益。

相關問題