콘솔 애플리케이션 (LINUX)에서 인쇄 된 문자를 어떻게 지우나요?
문제
진행률 표시 줄이 필요한 작은 콘솔 앱을 만들고 있습니다. ... 같은 ...
Conversion: 175/348 Seconds |========== | 50%
내 질문은 이미 콘솔에 이미 인쇄 된 캐릭터를 어떻게 지우는가? 51 %에 도달하면 콘솔 에서이 라인을 지우고 새 라인을 삽입해야합니다. 내 현재 솔루션에서는 이것이 일어나는 일입니다 ...
Conversion: 175/348 Seconds |========== | 50%
Conversion: 179/348 Seconds |========== | 52%
Conversion: 183/348 Seconds |========== | 54%
Conversion: 187/348 Seconds |=========== | 56%
내가 사용하는 코드는 ...
print "Conversion: $converted_seconds/$total_time Seconds $progress_bar $converted_percentage%\n";
PHP를 사용하여 Linux 에서이 작업을 수행하고 있습니다 (앱 만 사용하겠습니다. 언어 선택을 실례합니다). 따라서 솔루션은 Linux 플랫폼에서 작동해야하지만 크로스 플랫폼 인 솔루션이있는 경우 바람직합니다.
해결책
언어 선택에 대해 사과 할 필요는 없다고 생각합니다. PHP는 콘솔 애플리케이션을위한 훌륭한 언어입니다.
이것을 시도하십시오 :
<?php
for( $i=0;$i<10;$i++){
print "$i \r";
sleep(1);
}
?>
" r"은 새로운 텍스트로 줄을 덮어 씁니다. 새 라인을 만들려면 " n"만 사용할 수 있지만 이미 알고 있다고 생각합니다.
도움이 되었기를 바랍니다! 나는 이것이 Linux에서 작동한다는 것을 알고 있지만 Windows 또는 다른 운영 체제에서 작동하는지 모르겠습니다.
다른 팁
이전에 인쇄 된 문자를 지우려면 세 가지 옵션이 있습니다.
echo chr(8) . " ";
백 캐릭터를 반향하고 커서를 한 곳으로 옮기고 공간은 캐릭터를 덮어 씁니다. 당신이 사용할 수있는chr(8)
여러 문자를 뒤로 이동시키기 위해 여러 번 연속적으로 연속.echo "\r";
커서를 현재 라인의 시작으로 반환합니다. 이제 선을 새 텍스트로 바꿀 수 있습니다.세 번째 옵션은 ANSI 이스케이프 코드를 사용하여 커서 위치의 선과 열을 설정 한 다음 대체 문자를 인쇄하는 것입니다. 모든 터미널과 함께 작동하지 않을 수 있습니다.
function movecursor($line, $column){
echo "\033[{$line};{$column}H";
}
r 트릭을했습니다.
향후 참조를 위해 b는 Linux에서 PHP에서 작동하지 않습니다. 나는 호기심이 많았습니다. 그래서 나는 다른 언어로도 몇 가지 실험을했습니다 (Linux에서 이것을했습니다 - 결과가 Windows/Mac에서 동일할지 모르겠습니다) ..
b는 ...
- 펄
- 루비
- TCL- 코드와 함께
puts -nonewline "Hello\b"
b는 작동하지 않습니다
- PHP- 코드
print "Hello\b";
인쇄Hello\b
- 파이썬 - 코드
print "Hello\b"
인쇄Hello<new line>
. 동일한 결과print "Hello\b",
Linux에서 동일인지 확실하지 않지만 Windows 콘솔 앱에서는 인쇄 할 수 있으며 커서는 모든 문자를 오른쪽으로 덮어 쓸 수 있도록 라인의 첫 번째 왼쪽 위치로 돌아갑니다.
b를 사용하여 단일 문자를 되돌릴 수 있지만 진행률을 업데이트하기 때문에 인쇄 bx 횟수가 더 간단합니다.
이것은 꽤 오래된 주제 인 것 같지만 5를 떨어 뜨릴 것입니다.
for ($i; $i<_POSITION_; $i--) {
echo "\010"; //issue backspace
}
얼마 전에 인터넷에서 이것을 발견했는데, 불행히도 어디에서 기억하지 못합니다. 따라서 모든 크레딧은 원래 저자에게 전달됩니다.
이전에 인쇄 된 문자를 지우려면 다음 후 백 스페이스를 인쇄합니다. "A"Print " B"
인쇄 할 것입니다 아무것도 아님 (실제로 인쇄 한 다음 백 스페이스가 있지만 아마도 눈치 채지 못할 것입니다).