6

我想在 groovy 中显示Advance %,所以我想写在同一个位置,这意味着而不是看到:

1%
2%
3%
...

用户将看到数字在同一位置发生变化。我怎么做?(我在窗户上工作)

4

4 回答 4

5

我经常这样做,只是使用没有换行的回车:

printf "%5d\r", loopval

每次通过您的循环,打印将在行首重新开始。

如果在发生这种情况时应该打印出任何其他消息,尤其是当其他消息包含换行符时,它可能会变得有点混乱。但这是一个廉价而肮脏的解决方案。

于 2012-05-21T18:37:00.263 回答
2

你可以使用 Groovy 自带的 jline:

(1..5).each {
  print "Done $it of 5"
  Thread.sleep( 1000 )
  print jline.ANSIBuffer.ANSICodes.left( 9999 )
}

只要您的控制台支持 ANSI 转义序列,那应该可以工作......

PS:我使用 9999 因为(如左文档中所述

如果 n 大于或等于当前游标列,则游标移动到第一列

于 2012-05-21T15:10:14.590 回答
2

对于遇到此问题的任何人-我发现使用以下方法是最佳解决方案:

(0..100).each {
    print "\r$it%"
}
println()
于 2017-01-30T20:04:06.867 回答
1

正如 Danny Y. 已经说过的,换行将起作用,退格也可以解决问题:

(0..100).each {
  print "\b"*20+it+"%"
  sleep 100
}

我曾经不得不覆盖多行输出 - 我找到的解决方案是

print "\r\n"*80

为了将所有旧内容滚动出屏幕 - 这不是一个好的解决方案,但它适用于 Windows shell :-)

于 2012-05-22T08:02:54.500 回答