我正在尝试为命令行应用程序实现进度条,例如
[##### ] 50% complete
我知道我可以退格到行首并覆盖,但这看起来很恶心。我宁愿使用回车符将光标放在第一列,然后覆盖。
问题是 J 引擎似乎没有渲染回车符,而是渲染换行符+回车符。
这是我尝试过的:
echo 'hi',(10{a.),'world'
(其中 10{a.
是 ASCII 10,即回车符),打印
hi
world
echo 'hi',(13{a.),'world'
(换行符)打印
hi
world
shell 'printf "%s\r%s"hi world'
打印
hi
world
shell 'printf "%s\n%s"hi world'
打印
hi
world
最后,我在 JHS 而不是 Jconsole 中尝试了上述所有操作,得到了相同的结果。
由此可见三件事:
- J 前端将回车符转换为回车符+换行符。
- J 前端还将外部(例如通过 printf)生成的回车符处理为换行符。
- J 确实能够自行识别换行符,如上一个示例所示。
有什么帮助吗?
最佳答案
丑陋但有效:
0$ stdout shell 'printf "99 problems\rno"'
no problems
更新 - 丑陋程度降低 50%!
最好避免从 shell 调用 printf
:
0$stdout 'hi world',(13{a.),'12'
12 world
更新 - 丑陋程度减少 75%!
感谢@Eelvex 的评论
0$stdout 'hi world',CR,'12'
12 world
关于console-application - J 将回车符转换为换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695041/