1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def import(filename, out = $stdout, &block)
# Yes, there are gems that do progress bars.
# No, I'm not about to add another dependency for something this simple.
width = 50
processed = 0
printed = 0
total = File.read(filename).lines.length.to_f
label = File.basename(filename, '.csv')
out.print "%11s: |" % label
CSV.foreach(filename, headers: true) do |row|
yield row
processed += 1
wanted = (processed / total * width).to_i
out.print "-" * (wanted - printed)
printed = wanted
end
out.puts "|"
end
|