当前位置:  开发笔记 > 编程语言 > 正文

如何在控制台应用程序(Linux)中擦除打印的字符?

如何解决《如何在控制台应用程序(Linux)中擦除打印的字符?》经验,为你挑选了3个好方法。

我正在创建一个需要进度条的小型控制台应用程序.就像是...

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平台 - 但如果您有一个跨平台的解决方案,那将更为可取.



1> GnomeCubed..:

我不认为你需要为语言选择道歉.PHP是控制台应用程序的一种很好的语言.

试试这个:


"\ r"将使用新文本超越该行.要创建一个新行,你可以使用"\n",但我猜你已经知道了.

希望这可以帮助!我知道这适用于Linux,但我不知道它是否适用于Windows或其他操作系统.



2> Luna..:

要删除以前打印的字符,您有三个选项:

echo chr(8) . " ";回传后面的字符,并将光标移回一个地方,然后空格覆盖该字符.您可以chr(8)连续多次使用以移回多个字符.

echo "\r";将光标返回到当前行的开头.您现在可以用新文本替换该行.

第三个选项是使用ANSI转义码设置光标位置的行和列,然后打印替换字符.它可能不适用于所有终端:

  function movecursor($line, $column){
      echo "\033[{$line};{$column}H";
  }



3> Binny V A..:

\ r做了伎俩.

为了将来参考,\ b在Linux中的PHP中不起作用.我很好奇 - 所以我也用其他语言进行了几次实验(我在Linux中做了这个 - 我不知道Windows/Mac中的结果是否相同)

\ b适用于......

Perl的

红宝石

Tcl - 带代码 puts -nonewline "Hello\b"

\ b不起作用

PHP - 代码print "Hello\b";打印出来Hello\b

Python - 代码print "Hello\b"打印出来Hello.同样的结果print "Hello\b",

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有