Come sovrascrivere una linea stampata nella shell con Ruby?




(2)

Ecco un esempio che ho appena scritto che prende una matrice e restituisce gli spazi bianchi se necessario. È possibile decommentare la variabile di velocità per controllare la velocità in fase di esecuzione. Rimuove anche l'altro sleep 0.2 L'ultima parte dell'array deve essere vuota per produrre l'intero array, continuando a lavorare per risolverlo.

#@speed = ARGV[0]

strArray = [ "First String there are also things here to backspace", "Second Stringhereare other things too ahdafadsf", "Third String", "Forth String", "Fifth String", "Sixth String", " " ]


#array = [ "/", "-", "|", "|", "-", "\\", " "]

def makeNewLine(array)
    diff = nil
    print array[0], "\r"
    for i in (1..array.count - 1)
        #sleep @speed.to_f
        sleep 0.2
        if array[i].length < array[i - 1].length
             diff = array[i - 1].length - array[i].length
        end
        print array[i]
        diff.times { print " " } if !diff.nil?
        print "\r"
        $stdout.flush

    end
end

20.times { makeNewLine(strArray) }

#20.times { makeNewLine(array)}

Come sovrascrivere la riga precedentemente stampata in una shell Unix con Ruby?

Dire che mi piacerebbe produrre l'ora corrente su una shell ogni secondo, ma invece di impilare ogni stringa di tempo, vorrei sovrascrivere il tempo visualizzato in precedenza.


Usa la sequenza di escape \r alla fine della riga: è un ritorno a capo senza un avanzamento riga .

Sulla maggior parte dei terminali Unix questo farà ciò che vuoi: la riga successiva sovrascriverà la riga precedente.

Si consiglia di riempire la fine delle linee con spazi se sono più brevi delle righe precedenti.

Nota che questo non è specifico di Ruby. Questo trucco funziona in qualsiasi lingua!





shell