rubyでプログレスバーの備忘録
前にid:kenkitiiさんとプログレスバーで盛り上がったので忘れないように備忘録。
簡単なサンプル。
#!/usr/bin/ruby class Progress def initialize(word = ".") @cnt = 0 @space = " " @word = word end def bar(interval = 0.05) sleep interval @cnt += 1 STDERR.print("\r#{@word*@cnt}\r") end def clear cnt = @cnt * @word.size STDERR.print("\r#{@space*cnt}\r") end end pg = Progress.new(".") (1...20).each {|x| pg.bar } pg.clear
こんな感じになる。
$ ruby x.rb .............
ピリオドで進捗だとそっけないと思う場合は適当にwordを変更してください。Progress.new("(^-^)")だとこんな感じ。
$ ruby x.rb (^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)(^-^)
でも、ちゃんとプログレスバーを出すのだったらRuby/ProgressBarを使う方が良いと思います。
% irb --simple-prompt -r progressbar >> pbar = ProgressBar.new("test", 100) => (ProgressBar: 0/100) >> 100.times {sleep(0.1); pbar.inc}; pbar.finish test: 100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10 => nil >> pbar = ProgressBar.new("test", 100) => (ProgressBar: 0/100) >> (1..100).each{|x| sleep(0.1); pbar.set(x)}; pbar.finish test: