2011-02-10 9 views

Odpowiedz

50

Możesz użyć sekwencji ewidencyjnej \r na końcu linii (następna linia spowoduje nadpisanie tej linii). W następstwie swojej przykład:

require 'time' 

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

Hmm, lubię rozwiązanie @ jsegal lepiej, więc wybierz odpowiedź. Pamiętaj, aby nadal "płukać" swoje wyjście. – cam

+1

Jestem tutaj podzielony, ponieważ twoją odpowiedzią jest doskonale działający fragment kodu, o który dokładnie pytałem: rozwiązanie w * Ruby *. Tak, mogłoby być bardziej elegancko, gdyby używał sugestii jsegala. Ale a) odpowiedź jsegala nie jest specyficzna dla rubinu i b) wolę zaakceptować odpowiedź z roboczym ułamkiem. Zamierzam więc zmienić odpowiedź, aby odzwierciedlić sugestię jsegala i kiedy/jeśli ta zmiana zostanie zaakceptowana, przyjmuję twoją odpowiedź i nagrodzę jsegala, głosując na niego. To najlepsze, co mogę zrobić w tym systemie. –

+0

@Steph: Twój dylemat, na który można odpowiedzieć, wydaje się być przede wszystkim oparty na fakcie, że odpowiedź Jsegala nie zawierała fragmentu kodu. Zważywszy, że Stack Overflow nie jest witryną do udostępniania kodu, wydaje się, że jest to dość arbitralne wymaganie. Powinieneś upomnieć się o obie odpowiedzi, jeśli uznasz je za użyteczne, i zaakceptować to, które pomogło ci * najbardziej * w znalezieniu rozwiązania, które zadziałało dla ciebie. –

23

pomocą sekwencji ucieczki \r na końcu linii - jest to powrót przewóz bez paszy linii.

Na większości terminali unix zrobi to, co chcesz: następna linia zastąpi poprzednią linię.

Możesz wstawić koniec linii za pomocą spacji, jeśli są one krótsze niż poprzednie linie.

Należy zauważyć, że nie jest to specyficzne dla języka Ruby. Ta sztuczka działa w dowolnym języku!

+0

Należy zauważyć, że jeśli wynik tekstowy jest szerszy niż bieżące okno terminala, ponownie zaczniesz widzieć linię po linii wyjściowej. –

+3

Aby uniknąć problemów z bieżącą linią krótszą niż poprzednia. Podaj ją za pomocą metody rjust/ljust np. "moje wyjście" .ljust (80). – sunsations

1

Oto przykład, który właśnie napisałem, który pobiera tablicę i generuje spacje w razie potrzeby. Można odkomentować zmienną prędkości, aby kontrolować prędkość w czasie wykonywania. Usuń także drugi sen 0.2 Ostatnia część tablicy musi być pusta, aby wyprowadzić całą tablicę, wciąż pracując nad jej naprawieniem.

#@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)} 
Powiązane problemy