2011-02-10 8 views

Respuesta

50

Puede usar la secuencia de escape \r al final de la línea (la siguiente línea sobrescribirá esta línea). A raíz de su ejemplo:

require 'time' 

loop do 
    time = Time.now.to_s + "\r" 
    print time 
    $stdout.flush 
    sleep 1 
end 
+1

Hmm, me gusta mejor la solución de @ jsegal, así que elije su respuesta. Recuerde '' lavar '' todavía su salida. – cam

+1

Estoy dividido aquí, porque su respuesta es un fragmento de código perfectamente funcional de lo que pregunté exactamente: una solución en * Ruby *. Sí, podría ser más elegante si usara la sugerencia de jsegal. Pero a) la respuesta de jsegal no es específica de ruby ​​yb) Preferiría aceptar una respuesta con un fragmento de trabajo. Así que voy a seguir adelante y edito su respuesta para reflejar la sugerencia de jsegal, y cuando/si esa edición es aceptada, aceptaré su respuesta y recompensaré a jsegal al votarlo. Es lo mejor que puedo hacer bajo este sistema. –

+0

@Steph: su dilema sobre qué respuesta aceptar parece basarse principalmente en el hecho de que la respuesta de jsegal no incluía un fragmento de código. Teniendo en cuenta que Stack Overflow no es un sitio de intercambio de código, parece un requisito bastante arbitrario. Deberías votar mejor las dos respuestas si las encontraste útiles y aceptar la que más te ayudó * a encontrar la solución que funcionó para ti. –

23

Utilice la secuencia de escape \r al final de la línea - es un retorno carro sin una alimentación de línea.

En la mayoría de los terminales Unix esto hará lo que desee: la línea siguiente sobrescribirá la línea anterior.

Es posible que desee rellenar el final de las líneas con espacios si son más cortas que las líneas anteriores.

Tenga en cuenta que esto no es específico de Ruby. Este truco funciona en cualquier idioma!

+0

Tenga en cuenta que si la salida de texto es más ancha que la ventana de terminal actual, comenzará a ver línea tras línea de salida nuevamente. –

+3

Para evitar problemas con la línea actual que es corta que la anterior. Rellene con el método rjust/ljust, p. "mi salida" .jjust (80). – sunsations

1

Aquí hay un ejemplo que acabo de escribir que toma una matriz y genera espacios en blanco si es necesario. Puede descomentar la variable de velocidad para controlar la velocidad en tiempo de ejecución. Quite también el otro reposo 0.2. La última parte de la matriz debe estar en blanco para dar salida a toda la matriz y seguir trabajando en su reparación.

#@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)} 
Cuestiones relacionadas