Ich versuche, einen Fortschrittsbalken für eine Befehlszeilenanwendung zu implementieren, z.J verwandelt Carriage Return in Newline
[##### ] 50% complete
Ich weiß, ich kann einfach auf den Anfang der Zeile zurück und überschreiben, aber das scheint so eklig. Ich würde lieber den Wagenrücklauf verwenden, um den Cursor in die erste Spalte zu setzen und dann zu überschreiben.
Das Problem besteht darin, dass die J-Engine das Wagenrücklaufzeichen nicht zu rendern scheint und stattdessen einen Zeilenumbruch + Wagenrücklauf darstellt. Hier
ist, was ich versucht habe:
echo 'hi',(10{a.),'world'
(wo 10{a.
ist ASCII 10, dh Wagenrücklauf), die druckt
hi
world
echo 'hi',(13{a.),'world'
(Newline), das druckt
hi
world
shell 'printf "%s\r%s" hi world'
welche Drucke
hi
world
shell 'printf "%s\n%s" hi world'
, die schließlich
hi
world
druckt, habe ich versucht, alle oben in JHS statt JConsole, mit identischen Ergebnissen.
Daraus sind drei Dinge offensichtlich:
- Die J-Frontends den Wagenrücklauf in einen Wagenrücklauf + newline drehen.
- Das J-Frontend verarbeitet auch extern erzeugte Wagenrückläufe (z. B. durch printf) in Zeilenumbrüche.
- J erkennt eine neue Zeile selbst, wie im letzten Beispiel gezeigt.
Irgendwelche Hilfe? Hässliche
können Sie ANSI versuchen Escape-Codes, obwohl es weit hergeholt ist. Versuchen Sie '(ESC) [80D' anstelle des Wagenrücklaufs (wobei' (ESC) 'Zeichencode 27 ist) oder' (ESC) [A' nach einem Zeilenumbruch. – Sneftel
Ich kann keine Quelle dafür finden, aber afaik 'CR',' LF' und 'CRLF' erzeugen alle den gleichen Zeilenumbruch in jconsole. Hast du die ncurses-Bibliothek ausprobiert? – Eelvex
Laut '~ addons/docs/help/user/previous601.htm' scheint ANSI für UTF-8 ab J601 veraltet zu sein.Werde es aber versuchen. – hoosierEE