Groovy:如何在屏幕上的同一位置上写一行? (视窗)

时间:2012-05-21 15:05:03

标签: groovy

我想在groovy中显示提前%,所以我想写相同的位置,这意味着不要看到:

1%
2%
3%
...

用户将看到相同位置的数字发生变化。 我怎么做? (我正在开窗)

4 个答案:

答案 0 :(得分:5)

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

printf "%5d\r", loopval

每次循环,打印将在行的开头重新开始。

如果在发生这种情况时打印出任何其他消息,可能会有点麻烦,特别是如果其他消息包含换行符。但这是一个廉价而肮脏的解决方案。

答案 1 :(得分:2)

您可以使用Groovy附带的jline:

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

只要你的控制台支持ANSI转义序列,那就应该有效......

PS:我使用了9999因为(如the documentation for left中所述)

  

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

答案 2 :(得分:2)

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

(0..100).each {
    print "\r$it%"
}
println()

答案 3 :(得分:1)

正如Danny Y.已经说过的那样,换行工作正常,退格也会起作用:

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

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

print "\r\n"*80

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