Q
簡單進度指示
10
A
回答
21
最簡單的方法是做什麼wget和其他程序一樣:打印出的進展信息之前回車和ANSI擦除行代碼,從而光標回到行的開始,並替換現有文本。例如:
import Control.Monad
import Control.Concurrent
import System.IO
import Text.Printf
putProgress :: String -> IO()
putProgress s = hPutStr stderr $ "\r\ESC[K" ++ s
drawProgressBar :: Int -> Rational -> String
drawProgressBar width progress =
"[" ++ replicate bars '=' ++ replicate spaces ' ' ++ "]"
where bars = round (progress * fromIntegral width)
spaces = width - bars
drawPercentage :: Rational -> String
drawPercentage progress = printf "%3d%%" (truncate (progress * 100) :: Int)
main :: IO()
main = do
forM_ [0..10] $ \i -> do
let progress = fromIntegral i/10
putProgress $ drawProgressBar 40 progress ++ " " ++ drawPercentage progress
threadDelay 250000
putProgress "All done."
hPutChar stderr '\n'
這裏的關鍵就是要不打印換行,這樣就可以返回到下一個進度更新該行的開始。
當然,你可能只是在這裏打印出來的百分比和丟棄的酒吧,但酒吧是冷卻器:)
3
如果我想獲得真正的快速和骯髒的,我傾向於做的僅僅是打印序列的點。每次有「更多」的進展,我只寫一個點(沒有換行符)。我調整了「一點點進步」的措施,以便點對每秒點的時間尺度。不是很複雜,但它表明該程序正在做一些事情。
如果你實際上有某種程度的總體「進步」會有多少(我經常不會這樣做,但是這是你提到的百分比所提示的),那麼你可以聲明整個程序是X點,並在每次進行1/X時進行打印。
相關問題
- 1. 進度指示器
- 2. 進度指示器
- 3. 簡單的角度指令
- 4. 顯示進度指示器
- 5. 簡單的jQuery進度條
- 6. 實時進度指示器
- 7. PHP + Ajax進度指示器?
- 8. 新索引進度指示
- 9. 網站進度指示器
- 10. 黑莓進度指示器
- 11. parfor的進度指示
- 12. 進度指示器資源
- 13. Make/makefile進度指示!
- 14. ASP.NET MVC進度指示器
- 15. HttpEntity.getContent()進度指示器?
- 16. Vaadin進度指示器顯示Jenkins構建進度
- 17. 在NSSearchField內顯示進度指示器
- 18. 顯示不確定進度指示器
- 19. Bootstrap模態的簡單角度指令
- 20. 簡單示例速度示例
- 21. 在C++中顯示一個簡單的進度條
- 22. Inno Setup的簡單進度頁面
- 23. 簡單的jQuery進度條百分比
- 24. BrowserField2黑莓簡單進度條
- 25. Cocos2d-x:創建簡單的進度條
- 26. 最簡單的PHP上傳進度條
- 27. 簡單的PHP升級進度計算
- 28. 簡單的進度欄輸入文件
- 29. GMLib簡單的指示樣品
- 30. 創建工具提示簡單指南?
是'cls'允許重繪? –
也,你可能只需要使用某種形式的'echo'不打印線斷裂,從而出現'回一個符號erase'控制字符,這樣就可以使一個旋轉的動畫(從製造 -/| \) –
我的Haskell是那種生疏,至少可以說,但如果我沒有記錯,使用putStr用\ r在年底會做不換行應該讓你覆蓋你就行了回車。 –