2011-02-10 41 views

答えて

50

行末に\rエスケープシーケンスを使用できます(次の行がこの行を上書きします)。あなたの例を次に示します。

require 'time' 

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

私は@ jsegalのソリューションがより好きなので、彼の答えを選んでください。あなたの出力をまだフラッシュすることを忘れないでください。 – cam

+1

私はここで分かれています。あなたの答えは、私が正確に尋ねたことのコードの完全な働きのスニペットです:* Ruby *の解決策です。はい、それはjsegalの提案を使用した場合よりエレガントになる可能性があります。しかし、a)jsegalの答えはruby特有ではなく、b)私はむしろ働くスニペットで答えを受け入れることが大です。だから私は先に進み、あなたの答えを編集してjsegalの提案を反映させ、その編集が受け入れられたら、私はあなたの答えを受け入れ、jsegalに投票して報酬を与えるでしょう。このシステムの下で私ができることは最高です。 –

+0

@Steph:あなたのジレンマは、主にjsegalの答えにコードスニペットが含まれていないという事実に基づいているようです。スタックオーバーフローがコード共有サイトではないことを考えると、それはかなり恣意的な要求のようです。あなたが役に立つと分かった場合は、両方の答えをupvoteし、あなたのために働いた解決策を見つけるのに*最も*役に立ったものを受け入れるべきです。 –

23

は、行の末尾にエスケープシーケンス\rを使用してください - それは改行なしキャリッジリターンです。

ほとんどのUNIX端末では、これはあなたが望むことを行います。次の行が前の行を上書きします。

行の末尾が前の行より短い場合は、行末をスペースで埋めたい場合があります。

これはRuby固有のものではありません。このトリックはどんな言語でも機能します!

+0

テキスト出力が現在のターミナルウィンドウよりも広い場合は、出力行の後に行が再び表示されることに注意してください。 –

+3

現在の行が前の行よりも短い問題を回避します。メソッドrjust/ljustでパッドします。 "私の出力" .ljust(80)。 – sunsations

1

ここでは、書いたばかりの例で、Arrayをとり、必要に応じて空白を出力します。実行時に速度を制御するために速度変数のコメントを解除することができます。また、他の睡眠を取り除く。0.2配列の最後の部分は空でなければならず、配列全体を出力していなければならない。

#@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)} 
関連する問題