1.5.6 フォーマットの動的変更

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の時代には使えなかったので 知らない人も多いが, 知っていると非常に便利である.