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

cf. Ruby/ProgressBar: プログレスバーをテキストで表示する Ruby用のライブラリ
via 趣味的にっき - プログレスバーをテキストで表示する関数


インストールは progressbar.rb をライブラリパスの通ったところにおけばいいだけ。

ProgressBar のインスタンスをつくっておいて ProgressBar#inc か ProgressBar#set で進捗を表示する。
まずは記事にある使用例で試してみよう。

 D:\>irb -rprogressbar
 irb(main):001:0> pbar = ProgressBar.new("title", 100)
 => #<ProgressBar:0/100>                                        | ETA:  --:--:--
 irb(main):002:0> (1..100).each{|i| sleep(0.1); pbar.set(i)}; pbar.finish
 title:         100% |oooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:35
 => Thu Dec 21 21:29:46 +0000 2006


ProgressBar#file_transfer_mode を使うと,ファイルの転送バイト数と転送速度を表示できる。
こんな感じ。

 require 'progressbar'
 
 fname1 = ARGV.shift
 fname2 = ARGV.shift
 
 f1 = File.open(fname1, "rb")
 f2 = File.open(fname2, "wb")
 size = File.size(fname1)
 
 pbar = ProgressBar.new("transfer file", size)
 pbar.file_transfer_mode
 
 until f1.eof?
   f2.write(f1.read(1000))
   pbar.inc(1000)
 end
 pbar.finish
 
 f1.close
 f2.close

ファイルのコピーを低レベルでやらなきゃいけないけど。


実行例。

 D:\>copy_pbar.rb projects.xls copy_projects.xls
 transfer file: 100% |oooooooooooooooooooooooo|   5.0MB  35.5MB/s Time: 00:00:00