FORMAT文を用いてWRITE文などで出力する書式を指定する場合,
書式の中に変数が使えないため,
「プログラムの中で必要な桁数を判断して,
出力する桁数を変える」という様な芸当ができない.
このあたりが, 古い言語の堅さの1つなのであるが,
「だからFORTRANはきらいだ」という前に, 以下の説明を読んで欲しい.
FORTRAN77では WRITE文の書式識別子にFORMAT文の文番号ではなく, 以下のように, 文字変数を指定することができる. この機能を使えば, 書式の動的な変更が可能になる.
CHARACTER CFMT*12 ... CFMT = '(T12, F5.2)' WRITE(6,CFMT) X ...
この例では, 文字変数cfmtに定数を代入しているだけなので,
動的に書式を変更するようにはなっていないが,
cfmtは変数であるから,
プログラムの中で変更するのは容易である.
桁数などの数値変数を文字変数に書き込むには, やはりWRITE文を使う. WRITE文の出力機番を書くところに文字変数を書くと, その文字変数を``内部ファイル''として, 普通のWRITE文と同じ様に編集, 出力ができる.
CHARACTER CFMT*12 ... CFMT = '(T12, Fx.2)' WRITE(CFMT(8:8),'(I1)') N WRITE(6,CFMT) X ...
この例では, 整変数nを文字変数cfmtの8桁目に書き込み, xを出力する際の桁数としている. このあたりのテクニックはFORTRAN66の時代には使えなかったので 知らない人も多いが, 知っていると非常に便利である.