2016-05-12 50 views
-4

我正在编写一个程序,该程序读取一个.csv文件,然后循环删除输出前遇到的每个第10条记录。使用循环删除阵列中的第n条记录

我一直卡在我认为是一个语法问题一段时间,只是似乎不能钉它。任何人都介意看看?

lines = [] 
i = 0 

elements = [] 
element2 = [] 
output = [] 

file = File.open("./properties.csv", "r") 

while (line = file.gets) 
    i += 1 
    # use split to break array up using commas 
    arr = line.split(',') 
    elements.push({ id: arr[0], streetAddress: arr[1], town: arr[2], valuationDate: arr[3], value: arr[4] }) 
end 

file.close 

# filter out blanks and nill rows 
x = elements.select { |elements| elements[:id].to_i >= 0.1} 

# Loop to remove every 10th record 
e = 0 
d = 1 

loop do x.length 
    if e == (10 * d) 
     d ++ 
     e ++ 
    else 
     x = elements.select[e] 
     e ++ 
end 

puts x 

puts "#{x.length} house in list, #{d} records skipped." 

CSV FILE 
ID,Street address,Town,Valuation date,Value 
1,1 Northburn RD,WANAKA,1/1/2015,280000 
2,1 Mount Ida PL,WANAKA,1/1/2015,280000 
3,1 Mount Linton AVE,WANAKA,1/1/2015,780000 
4,1 Kamahi ST,WANAKA,1/1/2015,155000 
5,1 Kapuka LANE,WANAKA,1/1/2015,149000 
6,1 Mohua MEWS,WANAKA,1/1/2015,560000 
7,1 Kakapo CT,WANAKA,1/1/2015,430000 
8,1 Mt Gold PL,WANAKA,1/1/2015,1260000 
9,1 Penrith Park DR,WANAKA,1/1/2015,1250000 
10,1 ATHERTON PL,WANAKA,1/1/2015,650000 
11,1 WAIMANA PL,WANAKA,1/1/2015,780000 
12,1 ROTO PL,WANAKA,1/1/2015,1470000 
13,1 Toms WAY,WANAKA,1/1/2015,2230000 
14,1 MULBERRY LANE,WANAKA,1/1/2015,415000 
15,1 Range View PL,WANAKA,1/1/2015,300000 
16,1 Clearview ST,WANAKA,1/1/2015,1230000 
17,1 Clutha PL,WANAKA,1/1/2015,700000 
18,1 Centre CRES,WANAKA,1/1/2015,295000 
19,1 Valley CRES,WANAKA,1/1/2015,790000 
20,1 Edgewood PL,WANAKA,1/1/2015,365000 
21,1 HUNTER CRES,WANAKA,1/1/2015,335000 
22,1 KOWHAI DR,WANAKA,1/1/2015,480000 
23,1 RIMU LANE,WANAKA,1/1/2015,465000 
24,1 CHERRY CT,WANAKA,1/1/2015,495000 
25,1 COLLINS ST,WANAKA,1/1/2015,520000 
26,1 AUBREY RD,WANAKA,1/1/2015,985000 
27,1 EELY POINT RD,WANAKA,1/1/2015,560000 
28,1 LINDSAY PL,WANAKA,1/1/2015,385000 
29,1 WINDERS ST,WANAKA,1/1/2015,760000 
30,1 Manuka CRES,WANAKA,1/1/2015,510000 
31,1 WILEY RD,WANAKA,1/1/2015,420000 
32,1 Baker GR,WANAKA,1/1/2015,820000 
33,1 Briar Bank DR,WANAKA,1/1/2015,1260000 
34,1 LAKESIDE RD,WANAKA,1/1/2015,440000 
35,1 PLANTATION RD,WANAKA,1/1/2015,345000 
36,1 Allenby PL,WANAKA,1/1/2015,640000 
37,1 ROB ROY LANE,WANAKA,1/1/2015,380000 
38,1 Ansted PL,WANAKA,1/1/2015,590000 
39,1 Fastness CRES,WANAKA,1/1/2015,640000 
40,1 APOLLO PL,WANAKA,1/1/2015,385000 
41,1 AEOLUS PL,WANAKA,1/1/2015,370000 
42,1 Peak View RDGE,WANAKA,1/1/2015,1750000 
43,1 Moncrieff PL,WANAKA,1/1/2015,530000 
44,1 Islington PL,WANAKA,1/1/2015,190000 
45,1 Hidden Hills DR,WANAKA,1/1/2015,1280000 
46,1 Weatherall CL,WANAKA,1/1/2015,425000 
47,1 Terranova PL,WANAKA,1/1/2015,900000 
48,1 Cliff Wilson ST,WANAKA,1/1/2015,1200000 
49,1 TOTARA TCE,WANAKA,1/1/2015,460000 
50,1 Koru WAY,WANAKA,1/1/2015,570000 
51,1 Bovett PL,Wanaka,1/1/2015,495000 
52,1 Pearce PL,Wanaka,1/1/2015,675000 
53,1 Ironside DR,WANAKA,1/1/2015,570000 
54,1 Bob Lee PL,WANAKA,1/1/2015,610000 
55,1 Hogan LANE,WANAKA,1/1/2015,395000 
56,1 ARDMORE ST,WANAKA,1/1/2015,1190000 
57,1 Bullock Creek LANE,WANAKA,1/1/2015,11125000 
58,1 DUNMORE ST,WANAKA,1/1/2015,1300000 
59,1 Primary LANE,WANAKA,1/1/2015,430000 
60,1 SYCAMORE PL,WANAKA,1/1/2015,720000 
61,1 FAULKS TCE,WANAKA,1/1/2015,780000 
62,1 Alpha CL,WANAKA,1/1/2015,500000 
63,1 Coromandel ST,WANAKA,1/1/2015,530000 
64,1 Niger ST,WANAKA,1/1/2015,475000 
65,1 Maggies Way,WANAKA,1/1/2015,375000 
66,1 Hollyhock LANE,QUEENSTOWN,1/1/2015,1080000 
67,1 ELDERBERRY CRES,WANAKA,1/1/2015,1340000 
68,1 Foxglove HTS,WANAKA,1/1/2015,2520000 
69,1 MEADOWSTONE DR,WANAKA,1/1/2015,650000 
70,1 OAKWOOD PL,WANAKA,1/1/2015,580000 
71,1 MEADOWBROOK PL,WANAKA,1/1/2015,645000 
72,1 Jessies CRES,WANAKA,1/1/2015,320000 
73,1 Lansdown ST,WANAKA,1/1/2015,700000 
74,1 Stonebrook DR,WANAKA,1/1/2015,640000 
75,1 Hyland ST,WANAKA,1/1/2015,500000 
76,1 TAPLEY PADDOCK,WANAKA,1/1/2015,720000 
77,1 Homestead CL,WANAKA,1/1/2015,1750000 
78,1 NORMAN TCE,WANAKA,1/1/2015,620000 
79,1 Sunrise Bay DR,WANAKA,1/1/2015,3000000 
80,1 LARCH PL,WANAKA,1/1/2015,570000 
81,1 MILL END,WANAKA,1/1/2015,600000 
82,1 Bills WAY,WANAKA,1/1/2015,750000 
83,1 Heuchan LANE,WANAKA,1/1/2015,610000 
84,1 SARGOOD DR,WANAKA,1/1/2015,455000 
85,1 Frederick ST,WANAKA,1/1/2015,455000 
86,1 Connell TCE,WANAKA,1/1/2015,600000 
87,1 Soho ST,QUEENSTOWN,1/1/2015,320000 
88,1 Hikuwai DR,ALBERT TOWN,1/1/2015,280000 
89,1 Harrier LANE,WANAKA,1/1/2015,1000000 
90,1 Ewing PL,WANAKA,1/1/2015,780000 
91,1 Sherwin AVE,ALBERT TOWN,1/1/2015,440000 
92,1 Hardie PL,WANAKA,1/1/2015,830000 
93,1 Finch ST,ALBERT TOWN,1/1/2015,540000 
94,1 Poppy LANE,ALBERT TOWN,1/1/2015,395000 
95,1 Warbler LANE,ALBERT TOWN,1/1/2015,410000 
96,1 Balneaves LANE,WANAKA,1/1/2015,250000 
97,1 Mill Green,Arrowtown,1/1/2015,800000 

回答

1
require 'csv' 

elements = {} 

CSV.foreach("properties.csv", :headers => true, :header_converters => :symbol) do |row| 
    elements[row.fields[0]] = Hash[row.headers[1..-1].zip(row.fields[1..-1])] 
end 

d = 0 
e = 0 
elements.delete_if do |key, value| 
    e += 1 

    if e == 10 
    e = 0 
    d += 1 
    end 

    e == 0 
end 

puts "#{elements.length} house in list, #{d} records skipped." 

在本月底,元素将每10行删除,d包含删除的行数。