【Ruby】標準出力でかっこよく進捗を表示する
すごい長い時間処理をするプログラムを作っていたのですが、どこまで処理をできたかのフィードバックが欲しいと思い調べてみました。
標準出力で処理回数を表示してたのですがいかんせんイケてなかったので、イケてる表示方法を調べてみました。
普通に表示する
普通に進捗を表示してみる。max = 10000 (1..max).each{|num| puts "#{num}/#{max} Progress rate: #{num*100/max}%" }
下記のように残念な感じになる。
1/10000 Progress rate: 0% 2/10000 Progress rate: 0% 3/10000 Progress rate: 0% 4/10000 Progress rate: 0% 5/10000 Progress rate: 0% 6/10000 Progress rate: 0% 7/10000 Progress rate: 0% 8/10000 Progress rate: 0% 9/10000 Progress rate: 0% 10/10000 Progress rate: 0% ・ ・ ・ 9990/10000 Progress rate: 99% 9991/10000 Progress rate: 99% 9992/10000 Progress rate: 99% 9993/10000 Progress rate: 99% 9994/10000 Progress rate: 99% 9995/10000 Progress rate: 99% 9996/10000 Progress rate: 99% 9997/10000 Progress rate: 99% 9998/10000 Progress rate: 99% 9999/10000 Progress rate: 99% 10000/10000 Progress rate: 100%
キャリッジリターン(\r)を使う
先頭に"\r"を付けると、標準出力が上書きされる。
max = 10000 (1..max).each{|num| print "\r#{num}/#{max} Progress rate: #{num*100/max}%" sleep(0.01) }
下記のように進捗が1行で表示される。かっこいー。
3516/10000 Progress rate: 35%