コンソールでローディングを表示

rubyXLで100以上シートのあるエクセルファイルを読み出すスクリプトを書いていて、
現在の処理中のシート/シートの総数でプログレスバーを表示することはしたけど、
ファイル読み込み中(5~7秒ぐらいかかる)はなんにもコンソールに表示されない状態が物足りなくて、
ファイルの読み込み中はローディングチックなのを出すようにした。

読み込みと別でThread生成して、そのThread内で1秒毎に >と > >と > > >を出している。
読み込みが完了したらThreadをkillしてる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def display_with_arrow(&block)
  loading_thread = Thread.start{
                              arrow_progress = %w(> >> >>>).cycle
                              loop{
                                print "  r file reading #{sprintf("%-  s3s",arrow_progress.next)}"
                                sleep 1
                              }
                            }

  rtn = block.call
  Thread.kill(loading_thread)
  rtn
end

# 読み込み
workbook = display_with_arrow do
             RubyXL::Parser.parse("エクセルファイルへのパス")
           end

するとこうなる。
f:id:gogo  _sakura:20141106201955g:image

Comments