2015-11-20 13 views
5

ho semplice interfaccia a riga di comando con le annotazioni di inserimento nel DB e ora si scrive un sacco di informazioni su stdout, in questo modo:stdout dinamica in Haskell

...  
record 856/1000: 85% 
record 857/1000: 85% 
record 858/1000: 85% 
... 

ma voglio avere 1 linea dinamica con l'aggiornamento parametri attuali della stringa

status   |T | C | A | E 
--------------------------------------- 
    inserting |1000 | 857 | 85% | 96 

Come posso ottenere quello?

+1

[ 'ncurses'] (https://hackage.haskell.org/package/ncurses) o qualche libreria progressbar di livello superiore come [questo] (https: // GitHub .com/yamadapc/haskell-ascii-progress) lo farò, penso. – fjarri

+0

Ho anche sentito parlare molto bene di [brick] (https://github.com/jtdaugherty/brick/). – hao

+2

Basta stampare un CR - vedi questa domanda SO: http://stackoverflow.com/q/31900566/866915 – ErikR

risposta

11

Se è solo una riga, è possibile utilizzare \r per riavvolgere il cursore all'inizio della riga.

Ecco un esempio: biblioteca di

import Control.Concurrent 
import Control.Monad 
import Text.Printf 

main :: IO() 
main = do 
    forM_ [10, 9 .. 1] $ \seconds -> do 
     printf "\rLaunching missiles in %2d..." (seconds :: Int) 
     threadDelay $ 1 * 1000 * 1000 
    putStrLn "\nBlastoff!" 
+0

Questo è esattamente ciò di cui ho bisogno, grazie! –