2013-02-19 2 views
4

터미널에 두 줄을 출력하고 두 줄을 모두 지우고 싶습니다. 난 당신이루비를 사용하여 터미널 출력을 여러 줄로 삭제하기

print "\b"*whatever 

같은 작업을 수행하여 하나를 수행 할 수 있습니다 알고 있지만 좀 더 같은 것을 할 싶습니다 : 출력은 신속하게 다음

1 
Hello! 
2 
Hello! 
3 
Hello! 
4 
Hello! 
5 
Hello! 
의 모든 통해 갈 것
[1, 2, 3, 4, 5].each do |item| 
    # code to delete the previous two lines 
    print item.to_s + "\nHello!" 
end 

하지만 결국에는 최종 반복이 모두 표시됩니다.

답변

11

음, 간단한 일로, ANSI 호환 단말기 (일반적으로 좋은 선택)를 사용할 수 있다면 ANSI codes을 직접 출력 할 수 있습니다. 예를 들어, \r는 커서를 줄의 처음으로 이동

5.times do |item| 
    print "\r" + ("\e[A\e[K"*3) if item > 0 
    puts "#{item+1}\nHello!" 
end 

\e[A 커서를 한 줄 위로 이동하고, \e[K 라인의 끝으로 커서 위치에서 지워집니다. 화면 아래쪽에 아무것도 더 이상 필요하지 않으면 커서를 놓으면 \e[J을 보낼 수도 있습니다. 화면의 끝까지 완전히 사라집니다.

더 세련된 내용을 보려면 the Highline gem을 살펴보십시오.

관련 문제