テキストなプログレスバー

進行状況を表示します。全体の値と進み方のディレイ時間とを引数に取ります。

$ ruby progressbar.rb 250 .05
[**************************************************] 250 / 250

みたいな感じ。

#!/usr/bin/env ruby
# coding: utf-8

max = ARGV[0] ? ARGV[0].to_i : 100
max_size = max.to_s.size
sleep_delay = ARGV[1] ? ARGV[1].to_f : 0.1
(1..max).each do |i|
  # something to do
  print "\r" + "[#{'%-50s' % ('*' * (i.to_f / max * 50).to_i)}] #{'%*d' % [max_size, i]} / #{max}"
  sleep sleep_delay
end
print "\n"

作ったきっかけ

\rってCarriageReturnだから行頭に戻るだけだし、yumやらrubygemsやらhomebrewやらでよく見かけるテキストのプログレスバーが作れるよな、と思ったので。
意外と簡単だった。

レシピブックに載ってたw

Rubyレシピブック 第3版 303の技

Rubyレシピブック 第3版 303の技

Rubyレシピブック 第2版 268の技

Rubyレシピブック 第2版 268の技

まぁ有るわなw