Control character
制御文字
制御文字と呼ばれる,ターミナルを制御する特殊なASCII文字がある.
Fortranでも,整数を文字に変換することでそれらの文字を変数に代入することが出来る.これを用いてカーソルを移動させたり行を消したりすることが出来,よくプログレスバーの出力などに応用される.
The points
要点
1. Conversion from integer to ASCII character is done by the built-in function vn{achar}.
整数からASCII文字への変換は組み込み関数acharで行う.
2. Control character works on the terminal, i.e., for standard output and standard error output, but it does not work for writing to the file. Even though control character for deleting a line the terminal was written to the file, the line on the file will not be deleted, of course.
制御文字はターミナル上,すなわち標準出力・標準エラー出力への出力において有効であるが,ファイルへの書き込みにおいては機能しない.ターミナル上で行を消す制御文字をファイルに書き込んでも,ファイルの行が消えたりは当然しない.
3. Output with not print statement but write statement because print statement automatically starts a new line. On the write statement, line breaking can be disabled by specifying advance='no'.
Note that unit number 6 is standard output and 0 is standard error output in many cases.
出力はprint文ではなくwrite文によって行う.print文では自動的に改行してしまうためである.write文ではadvance='no'を指定することで改行を無効にすることが出来る.
なお多くの場合,装置番号は6が標準出力,0が標準エラー出力となっている.
Sample
If you compile and execute it, line does not move and the number is updated every minutes as follows. Finally 10 is left on the terminal.
The underbar indicates the cursor.
これをコンパイルして実行すると,次のように,行が進まず1秒ごとに数字が更新されていく.最終的にターミナル上には10が残る.
アンダーバーはカーソルを示す.
...
Star a new line with the first write statement.
The string esc//'M' output next is a command M, which moves the cursor one line up.
Then output i and break the line (a new line starts because advance='no' is not specified. You may specify advance='no' explicitly).
By repeating "move to one line up -> output i -> start a new line", you can output integers on the same position.
There are many commands, so look into them in accordance to your purpose.
最初のwrite文でまず1行降りる.
次に出力されるesc//'M'はMというコマンドで,カーソルを1行上に移動させる.
そしてiを出力して改行する (advance='no'としていないので改行される.明示的にadvance='yes'と書いても良い).
この 「1行上に移動 -> iを出力 -> 改行」を繰り返すことで,同じ場所に数字を出力し続けることができるというわけである.
色々なコマンドがあるので,目的に応じて調べて使うと良い.