J将回车换成换行符

hoo*_*rEE 5 console-application j carriage-return

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

[#####     ] 50% complete
Run Code Online (Sandbox Code Playgroud)

我知道我可以退回到线的起点并覆盖,但这看起来很糟糕.我宁愿使用回车键将光标放在第一列然后覆盖.

问题是J引擎似乎不呈现回车符,而是呈现换行符+回车符.

这是我尝试过的:

echo 'hi',(10{a.),'world'(10{a.打印时,ASCII 10,即回车)

hi
world
Run Code Online (Sandbox Code Playgroud)

echo 'hi',(13{a.),'world' (换行)打印

hi
world
Run Code Online (Sandbox Code Playgroud)

shell 'printf "%s\r%s" hi world' 打印

hi
world
Run Code Online (Sandbox Code Playgroud)

shell 'printf "%s\n%s" hi world' 打印

hi
  world
Run Code Online (Sandbox Code Playgroud)

最后,我在JHS中尝试了以上所有内容而不是Jconsole,结果相同.

由此可见,有三件事是显而易见的:

  1. J前端将回车转换为回车+换行.
  2. J前端还将外部生成的回车(例如printf)处理为换行符.
  3. J 确实自己识别换行符,如上例所示.

有帮助吗?

hoo*_*rEE 5

丑陋但有效:

   0$ stdout shell 'printf "99 problems\rno"'
no problems
Run Code Online (Sandbox Code Playgroud)

更新 - 减少50%!

更好,以避免printf从shell 调用:

   0$stdout 'hi world',(13{a.),'12'
12 world
Run Code Online (Sandbox Code Playgroud)

更新 - 减少75%的丑陋!

感谢@Eelvex的评论

   0$stdout 'hi world',CR,'12'
12 world
Run Code Online (Sandbox Code Playgroud)