문제

진행률 표시 줄이 필요한 작은 콘솔 앱을 만들고 있습니다. ... 같은 ...

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"

인쇄 할 것입니다 아무것도 아님 (실제로 인쇄 한 다음 백 스페이스가 있지만 아마도 눈치 채지 못할 것입니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top