J 将回车 return 变成换行符

J turns carriage return into newline

我正在尝试为命令行应用程序实现进度条,例如

[#####     ] 50% complete

我知道我可以退格到行首并覆盖,但这看起来太恶心了。我宁愿使用回车 return 将光标放在第一列,然后 然后 覆盖。

问题是 J 引擎似乎不渲染回车 return 字符,而是渲染换行符+回车 return.

这是我尝试过的:

echo 'hi',(10{a.),'world'(其中 10{a. 是 ASCII 10,即回车符 return)打印出

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 中尝试了上述所有方法,结果相同。

由此可见三点:

  1. J前端把回车return变成回车return+换行
  2. J 前端还将外部生成的回车符 return 处理为换行符。
  3. 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