コンソールで作業進捗状況を示す最も簡単な方法は何ですか?パーセンテージを出力するだけで十分です。プログレスバーは必要ありません。コンソールで簡単な進捗状況を表示
ちょうどprint
を使用すると、ロットの行が生成されます。端末内に1つの変更文字列が必要です。
コンソールで作業進捗状況を示す最も簡単な方法は何ですか?パーセンテージを出力するだけで十分です。プログレスバーは必要ありません。コンソールで簡単な進捗状況を表示
ちょうどprint
を使用すると、ロットの行が生成されます。端末内に1つの変更文字列が必要です。
最も簡単な方法は、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'
ここで重要なことはないにあるが、改行を出力します。もちろん
、あなたはちょうどここ割合をプリントアウトし、バーをドロップしますが、バーが低温である可能性があり:)
私は本当に迅速かつ汚い何かをしたい場合は、私は何をする傾向があることがちょうどシーケンスを印刷していますドットの"もう少し"進歩があるたびに、別のドット(改行なし)を書きます。私はドットが1秒あたりのドットの時間スケールの周りに来るように "進歩のビット"の尺度を調整します。それほど精巧ではありませんが、プログラムが何かをしていることを示しています。
実際に「進捗状況」がどれくらいあるかについての尺度があります(私はしばしばそうしませんが、これはあなたのパーセンテージの言及によって示唆されます)。 Xの点を印刷し、1/Xの進捗を行うたびに印刷します。
は、再描画が許可される「cls」ですか? –
また、改行を表示しない 'echo'という形式を使うこともできます。したがって、' back 1 symbol erase'制御文字があるので、 -/| \で作られた回転子アニメーションを作ることができます –
私のハスケルは一見言うと錆びていますが、正しく覚えていれば最後にputStrを使用すると改行せずにキャリッジリターンを行い、あなたが書いている行を上書きできるはずです。 –