2009/07/15

fortranでプログレスバー

改行を$で無くして,\rを効かせるのがミソ.
しかしダイレクトに \r を書いても,
intel fortranでは\rが表示されてしまったので,char(13)を利用.

--------------------------------------------------------
PROGRAM MAIN
implicit none
integer i

do i=1,100
if(mod(i,5).eq.0)then
call printProgressBar(i,100)
call sleep(1)
endif
enddo

END

subroutine printProgressBar(loopindex,loopmax)
implicit none
integer,parameter::ndigit=50
integer loopindex,loopmax
integer j

print'(a,$)',' ['
do j=1,loopindex*ndigit/loopmax
print'(a,$)','='
enddo
print'(a,$)','>'

do j=loopindex*ndigit/loopmax+1,ndigit
print'(a,$)',' '
enddo
print'(a,$)',']'
print'(f6.1,a,a,$)',100d0*loopindex/loopmax,'%',char(13)
c finalize
if(loopindex.eq.loopmax)print*,''
end subroutine


--------------------------------------------------------
fortranで
標準出力は6番
標準エラーは0番

0 件のコメント: