FORTRAN 77 言語リファレンス ホーム目次前ページへ次ページへ索引


第 5 章

入出力

この章では、Fortran 入出力の一般的な概念について説明します。また、さまざまな入出力の種類についても説明しています。入出力については、『Fortran プログラミングガイド』も参照してください。

FORTRAN 77 入出力の基本概念

UNIX オペレーティングシステムにもとづいたオペレーティングシステムは、Fortran 77 ほど記録処理向きではありません。UNIX オペレーティングシステムは、ファイルを記録の集まりとしてではなく文字の列として扱います。Fortran 77 実行時システムは、実行時にファイル書式と探査モードをチェックします。また、Fortran 77 ライブラリと標準入出力ライブラリを含むファイル機能を提供します。

論理ユニット

プログラムが 1 度に開くことができる論理ユニットの最大数は、Fortran 77 のデフォルトでは 64 です。Solaris では、この制限は 256 です。Fortran 77 プログラムは、setrlim() 関数を呼び出すことによって、この制限を 65 以上に増加することができます。setrlim(2) のマニュアルページを参照してください。csh を実行している場合は、limit または unlimit コマンドでも同じことができます。csh(1) を参照してください。

標準論理ユニット 0、5、および 6 は、それぞれ 標準エラー標準入力標準出力として事前に結合されています。これらの名前は、実際のファイル名ではないので各装置を開くためには使用できません。INQUIRE 文はこれらの名前を戻さず、上記の装置には、実ファイルに対して開かれていないかぎり名前がないことを示します。しかし OPEN 文を使用してこれらの装置を再定義することができます。

以前に結合された論理ユニットのデフォルトのファイル名でファイルを開きたいときは、その装置をまず閉じてください。標準装置を再定義すると通常のコンソール入出力が損なわれることがあります。代替方法はシェルによる切り替えを使用して、上記の装置を外部的に再定義することです。

デフォルト空白制御や標準入出力ファイルの書式を再定義する場合は、OPEN 文で装置番号を指定し、ファイル名は指定しないでください。また希望する空白制御の種類をオプションで設定してください。

入出力エラー

入出力処理中にエラーが検出されると、代わりとなる動作がプログラムの中で特に与えられていなければ、プログラムは処理を異常終了します。入出力文に ERR= (および IOSTAT= ) 項目を含めて、エラーを発見したときにとる代替分岐先 (および特定のエラーコードを戻すこと) を指定することができます。READ 文では、ファイルの最後に達した所で分岐するために END=n を含めることができます。ファイル位置と入出力並び項目の値は、エラーの後では未定義です。END=EOF と誤り条件の両方をとらえます。ERR= は誤り条件だけをとらえます。

ユーザーのプログラムが入出力エラーを捕捉しない場合、処理を異常終了する前に、論理ユニット、入出力状態、および大括弧 ([]) で囲まれたエラー番号を含むエラーメッセージが stderr に書き込まれます。処理を異常終了させるシグナルは IOT です。

1000 未満のエラー番号は、オペレーティングシステムのエラーを示します。intro(2) を参照してください。1000 以上のエラー番号は、入出力ライブラリに原因があります。

外部入出力では、バックスペースが可能なファイルからの読み取り中にエラーが起きた場合、現在の記録の一部が表示されます。内部入出力では、文字列中の現在位置に垂直バー (|) を付けて文字列の一部が出力されます。

一般的制限事項

入出力並びでは、実行された際に入出力文の実行を伴うような関数を引用しないでください。例を次に示します。

WRITE( 1, 10)  Y, A + 2.0 * F(X)   !  F() が入出力を行うのは間違い

入出力の種類

f77 でサポートされている入出力の種類には、書式付き、書式なし、バイナリ © 、並び、および NAMELIST があります。

ファイルへの探査には順番と直接という 2 つのモードがあります。ファイルを開くと、探査モードは順番または直接に設定されます。ユーザーが明示的に設定しなければ、デフォルトで順番に設定されます。

ファイルには外部と内部の 2 つの型があります。外部ファイルは、たとえばディスクやテープのような物理的な周辺装置上に常駐します。内部ファイルは主記憶装置内にあります。内部ファイルは文字型で、変数、部分列、配列、配列要素または構造体記録の欄のいずれかです。内部ファイルは周辺装置のように読み取ったり、書き込んだりすることができます。

入出力の組み合わせ

外部ファイルの入出力組み合わせを以下の表に示します。

許可される組み合わせ 許可されない組み合わせ
順番探査、書式なし 直接探査、並びによる入出力
順番探査、書式付き 直接探査、変数群入出力
順番探査、並びによる 内部ファイルの変数群入出力
順番探査、変数群 書式なし、内部入出力
直接探査、書式なし バイナリ、直接探査 ©
直接探査、書式付き バイナリ、書式付き ©
バイナリ、順番探査、書式なし ©


以下の表は入出力書式、探査モード、および物理ファイルの型の組み合わせを示します。

表 5-1   f77 入出力の要約 
入出力の種類 探査モード
書式 ファイルの型 順番 直接


書式付き
内部 ファイルは文字変数、部分列、
配列、または配列要素。©
ファイルは文字の配列である。各記録は 1 つの配列要素である。
外部 同一長または可変長の書式付き記録 書式付き記録だけ。すべて同一長。


書式なし
内部 (許可されない) (許可されない)
外部 書式なし記録だけを含む。 READ: 一度に 1 つの論理記録を獲得する。WRITE: 記録の満たされない部分は未定義。


並び
内部 READ: EOF まで、または入出力並びが満たされるまで読み取る。
WRITE: 入出力並びが満たされるまで書き込む。©
(許可されない)
外部 変数の型と要素のサイズにもとづいた標準書式を使用する。
空白またはコンマは分離文字である。任意の桁数。
(許可されない)




変数群
内部 (許可されない) (許可されない)
外部 READ: 桁 2-80 の中に $groupname を見つけるまで記録を読み取る。その後記録を読み取ってそのグループ内の名前を探し出し、それらの変数にデータを格納する。$ またはファイル終了マークで読み取りを停止する。
WRITE: グループ名と値を持つ各変数名を表している記録を書き込む。
(許可されない)


並びによる内部ファイルの書き込みは避けてください。行数と行毎の項目数は項目の値で変わります。

プリントファイル

OPEN 文の中で規格外の FORM='PRINT' を使用するとプリントファイルが得られます。©

	OPEN ( ..., FORM='PRINT', ... )

この指定子は、順番探査ファイルに対してだけ有効です。

定義

プリントファイルには以下の機能があります。

一般に FORM='PRINT' でファイルを開くと、並びによる出力は桁 1 に Fortran 77 規格の空白を与えず、FORM='PRINT' 以外で開いた場合はその空白を与えます。FORM='PRINT' は、1 回の呼び出しにつき 1 ファイルに対応します。

FORM='PRINT' で開いたファイルの内容は、FORM='FORMATTED'で開き、出力フィルタ asa でフィルタされたものと同じになります。

-oldldo オプション (旧の並びによる出力) を設定してコンパイルすると、プログラムによって書き込まれるすべてのファイルは、桁 1 に FORTRAN 77 規格の空白を与えずに並びによる出力を行いますが、それ以外のときのすべてのファイルは、空白を与えられます。
-oldldo オプションは大域的です。

INQUIRE

INQUIRE 文は、'PRINT' ファイルとして開かれた論理ユニットに対しては、FORM 変数の中で 'PRINT' を戻します。INQUIRE 文は、開かれていないファイルの装置番号に対しては -1 を返します。

OPEN の特殊用途

論理ユニットがすでに開かれていると、BLANK オプションを使用した OPEN 文は何も実行せず、そのオプションの再定義だけを行います。

規格外の拡張として、論理ユニットがすでに開かれていると、FORM='PRINT' FORM='FORMATTED' を切り換えるために FORM オプションを指定した OPEN 文は、何も実行せず、そのオプションの再定義だけを行います。©

これら OPEN 文の書式には、ファイル名を含める必要はありません。さらに UNIT が標準入力、標準出力、または標準エラーを引用しているときは、ファイル名を含めてはなりません。

OPEN 文を使用して装置を結合したときにファイル名パラメータを使用しないと、デフォルトファイル名 fort.nn が与えられます。ここで nn は装置番号です。したがって、標準出力をプリントファイルとして再定義するには次の書式を使用してください。

	OPEN( UNIT=6, FORM='PRINT') 

一時 (スクラッチ) ファイル

一時 (スクラッチ) ファイルを作成すると、一般に実行後に消滅します。

例: 一時ファイルの作成

	OPEN( UNIT=7, STATUS='SCRATCH' ) 

実行終了後に一時ファイルが消失するのを防ぐには、STATUS='KEEP' を設定して CLOSE 文を実行しなければなりません (一時ファイル以外のファイルでは、KEEP がデフォルトです)。

例: 後で探査したい一時ファイルを閉じる

	CLOSE( UNIT=7, STATUS='KEEP' ) 

後で再び開く場合は、INQUIRE 文を使用して一時ファイルの実名を取得することを忘れないでください。

IOINIT による入出力初期設定の変更

従来の Fortran 77 環境は、通常すべての論理ユニットについてキャリッジ制御を仮定していました。その環境では通常は入力時の空白スペースをゼロと解釈し、実行時に論理ユニットに大域的ファイル名を結合することもよくありました。ルーチン IOINIT(3F) を呼び出して、以下のような入出力制御パラメータを指定することができます。

例: IOINIT と論理ユニットの事前結合

	CALL IOINIT ( .TRUE., .FALSE., .FALSE., 'FORT', .FALSE.) 

ユーザーのプログラムが上記のように呼び出しを行うと、Fortran 77 実行時システムは環境を調べて形式 FORTnn の名前を探してから、対応する論理ユニットを順番書式付き入出力として開きます。

この例では、次のようにプログラムが装置 7 を開いたとします。

	OPEN( UNIT=07, FORM='FORMATTED' )

Fortran 77 実行時システムが環境を調べて FORT07 ファイルを探し、それを装置 7 に結合します。

一般に名前は PREFIXnn の形式でなければなりません。個々の PREFIX は、IOINIT への呼び出しの中で指定されます。nn は開く論理ユニットです。9 以下の装置番号は前に '0' を書かなければなりません。詳細は、IOINIT(3F) および『Fortran ライブラリ・リファレンス』を参照してください。

例: 外部ファイル ini1.inpini1.out を装置 1 と 2 に結合する

sh:

demo$ TST01=ini1.inp 
demo$ TST02=ini1.out 
demo$ export TST01 TST02 

csh:

demo% setenv TST01 ini1.inp 
demo% setenv TST02 ini1.out 

例: ファイル ini1.inpini1.outを装置 1 と 2 に結合します

demo% cat ini1.f 
	CHARACTER PRFX*8 
	LOGICAL CCTL, BZRO, APND, VRBOSE 
	DATA CCTL, BZRO, APND, PRFX, VRBOSE 
& 	/.TRUE., .FALSE., .FALSE., 'TST', .FALSE. / 
C 
	CALL IOINIT( CCTL, BZRO, APND, PRFX, VRBOSE ) 
	READ( 1, *) I, B, N 
	WRITE( *, *) 'I = ', I, ' B = ', B, ' N = ', N 
	WRITE( 2, *) I, B, N 
	END 
demo% cat $TST01
 12 3.14159012 6
demo% f77 ini1.f
ini1.f: 
 MAIN: 
demo% a.out 
 I =   12 B =     3.14159 N =   6 
demo% cat $TST02
   12    3.14159  6

IOINIT は作成されたときに、多くのプログラムにとって十分であることを立証しなければなりません。Fortran で書かれているため同様のユーザー作成ルーチンの例として役立ちます。IOINIT のソースコードは次から取り出すことができます。

/opt/SUNWspro/<release>/src/ioinit.f

<release>パスは、コンパイラのリリースごとに変わります。

直接探査

直接探査ファイルは、記録番号を指定して読み取り、または書き込みを行う多数の記録で構成されています。直接探査はランダム探査とも呼ばれます。

直接探査の特長および、制限事項は次のとおりです。

書式なし入出力

例: 直接探査、書式なし

	OPEN( 2, FILE='data.db', ACCESS='DIRECT', RECL=20, 
& 	FORM='UNFORMATTED', ERR=90 ) 
	READ( 2, REC=13, ERR=30 ) X, Y 
	READ( 2 ' 13, ERR=30 ) X, Y		    別の書式 © 

このコードは直接探査、記録長 20 文字の書式なし入出力のファイルを開き、13 番目の記録をそのまま読み取ります。

書式付き入出力

例: 直接探査、書式付き

	OPEN( 2, FILE='inven.db', ACCESS='DIRECT', RECL=20, 
& 	FORM='FORMATTED', ERR=90 ) 
	READ( 2, FMT='(I10,F10.3)', REC=13, ERR=30 ) A, B 

このコードは直接探査、記録長 20 文字の書式付き入出力のファイルを開き、13 番目の記録を読み取って、それを (I10,F10.3) 書式に従って変換します。

内部ファイル

内部ファイルは、定数、変数、部分列、配列、配列の要素、または構造体記録欄のような文字列オブジェクトです。これらはすべて文字型です。変数または部分列の場合には、ファイル中には 1 つの記録しかありません。配列の場合には、各配列要素が記録です。

順番書式付き入出力

FORTRAN 77 規格では、内部ファイルは順番書式付き入出力だけを含みます (ここでは入出力という用語は正確ではありませんが、内部ファイルは READ 文と WRITE 文を使用して処理されます)。内部ファイルは、装置番号の代わりに文字オブジェクトの名前を与えて使用します。順番探査内部ファイルからの読み取りは、常に内部ファイルの最初から開始されます。書き込みのときも同様です。

例:順番書式付き READ

	CHARACTER X*80 
	READ( 5, '(A)' ) X 
	READ( X, '(I3,I4)' ) N1, N2 

これは出力行イメージを X に読み込んで、その後 X から 2 個の整数を読み取ります。

直接探査入出力

f77 は、直接入出力を内部ファイルにまで拡張します。©

これはファイル内の記録数を変更できないことを除いて、外部ファイルの直接入出力に類似しています。この場合 1 記録は文字列の配列の単一要素です。

例: 内部ファイル LINE の 3 番目の記録の直接探査読み取り

demo% cat intern.f 
	CHARACTER LINE(3)*14 
	DATA LINE(1) / ' 81 81 ' / 
	DATA LINE(2) / ' 82 82 ' / 
	DATA LINE(3) / ' 83 83 ' / 
	READ ( LINE, FMT='(2I4)', REC=3 ) M, N 
	PRINT *, M, N 
	END 
demo% f77 -silent intern.f 
demo% a.out 
  83 83 
demo% 

書式付き入出力

書式付き入出力では、以下のことが行われます。

入力探査

一般に、書式付き READ 文は以下のことを行います。

例: 書式付き READ

	READ( 6, 10 ) A, B 
10	FORMAT( F8.3, F6.2 ) 

出力探査

一般に、書式付き WRITE 文は以下のことを行います。

例: 書式付き WRITE

	REAL  A / 1.0 /,  B / 9.0 /
	WRITE( 6, 10 ) A, B 
10	FORMAT( F8.3, F6.2 ) 

書式付き WRITE 文の場合、論理記録長は実行時に入力変数、または出力変数の並び (入出力並び) と相互に作用する FORMAT 文によって決定されます。

書式付き WRITE 文の場合、外部データ表現が指定された欄の幅に対して大きすぎるときは、指定された欄はアスタリスク (*) で満たされます。

書式付き READ 文の場合、並びの項目数がデータの欄数より少ないとき、余分の欄は無視されます。

書式指定子

表 5-2   書式指定子
用途 FORTRAN 77 f77 の拡張
空白制御 BN, BZ B
キャリッジ制御 /, space, 0, 1 $
文字編集 nH, Aw , 'aaa' "aaa", A
浮動小数点編集 Dw.dEe,
Ew.dEe,
Fw.dEe,
Gw.dEe
Ew.d.e,
Dw.d.e,
Gw.d.e
16 進編集
Zw.m
整数編集 Iw.m
論理編集 Lw
8 進編集
Ow.m
位置制御 nX, Tn, TLn, TRn nT, T, X
指数制御
nR, R
残存文字 Q
スケール制御 nP P
符号制御 S, SP, SS SU
書式終了 :
変数式
< e >


FORMAT 文の中、および入出力ライブラリルーチンへのすべての英字引数の中の書式指定子には、小文字だけでなく大文字も使用できます。

w、m、d、e パラメータ (Gw.dEe の場合) 

wmde パラメータの定義は次のとおりです。

wde のデフォルト値

欄指示子 w、d、または e なしで欄記述子 A、D、E、F、G、I、L、O、または Z を書くことができます。© これらが指定されないままのとき、入出力並び要素のデータの型にもとづいて適切なデフォルトが使用されます。表 5-3 を参照してください。

w、d、または e を使用する一般的な書式欄記述子を次に示します。

Aw, Iw, Lw, Ow, Zw, Dw.d, Ew.d, Gw.d, Ew.dEe, Gw.dEe

例: INTEGER*2 に対してデフオルト w=7 の場合 (10進数 161=16進数 A1) 

	INTEGER*2 M 
	M = 161 
	WRITE ( *, 8 ) M 
8	FORMAT ( Z ) 
	END

上記の例は、次のように表示されます。

demo% f77 def1.f 
def1.f: 
 MAIN: 
demo% a.out
DDDDDa1
demo% 

D は、空白文字の位置を示します。w、d、および e のデフォルト値を以下にまとめます。

表 5-3   書式欄記述子のデフォルト w、d、e の値
欄記述子 並びの要素 w
d
e
I,O,Z
BYTE
7
-
-
I,O,Z
INTEGER*2, LOGICAL*2
7
-
-
I,O,Z
INTEGER*4, LOGICAL*4
12
-
-
O,Z
REAL*4
12
-
-
O,Z
REAL*8
23
-
-
O,Z
REAL*16, COMPLEX*32
44
-
-
L
LOGICAL
2
-
-
F,E,D,G
REAL, COMPLEX*8
15
7
2
F,E,D,G
REAL*8, COMPLEX*16
25
16
2
F,E,D,G
REAL*16, COMPLEX*32
42
33
3
A
LOGICAL*1
1
-
-
A
LOGICAL*2, INTEGER*2
2
-
-
A
LOGICAL*4, INTEGER*4
4
-
-
A
REAL*4, COMPLEX*8
4
-
-
A
REAL*8, COMPLEX*16
8
-
-
A
REAL*16, COMPLEX*32
16
-
-
A
CHARACTER*n
n
-
-

複素数項目の w の値は各実数成分に対する値です。文字データを持つ A 記述子のデフォルトは、対応する入出力並びの要素の宣言された長さです。REAL*16COMPLEX*32SPARC のみです。

アポストロフィ編集 (`aaa')

アポストロフィ編集指定子は文字定数の書式を使用します。このため編集指定子自身に囲まれた文字 (空白を含みます) が書き込まれます。アポストロフィ編集指定子を入力に使用してはなりません。欄の幅は区切り用のアポストロフィの間に含まれる文字数です (区切り用のアポストロフィは含みません)。欄の中にあって間に空白がない 2 個の連続するアポストロフィは、1 個のアポストロフィとして数えられます。同様の方法で引用符も使用できます。

例: apos.f、アポストロフィ編集 (等価な 2 つの方法)

	WRITE( *, 1 ) 
1	FORMAT( 'これはアポストロフィ''です。') 
	WRITE( *, 2 ) 
2	FORMAT( "これはアポストロフィ'です。") 
	END

上記の例は「これはアポストロフィ'です。」を 2 回書き込みます。

空白編集 (B、BN、BZ)

B、BN、および BZ 編集指定子は、数値入力によって埋め込まれた空白と後に続く空白の解釈を制御します。

以下に示す空白指定子が使用可能です。

数値入力欄の空白 (先行の空白を除く) は、書式に特定の空白指定子がない場合、現在装置に対して有効な OPEN 文の BLANK= サブオプションの値に応じてゼロと解釈されるか、または無視されます。そのサブオプションのデフォルト値は ignore (無視する) なので、BN/BZ/BBLANK= の両方にデフォルトを使用すれば ignore (無視する) となります。

例: 同じデータを BZBN で一度ずつ読み取って出力する例

demo% cat bz1.f 
*			12341234 
	CHARACTER LINE*18 / ' 82 82 ' / 
	READ ( LINE, '( I4, BZ, I4 ) ') M, N 
	PRINT *, M, N 
	READ ( LINE, '( I4, BN, I4 ) ') M, N 
	PRINT *, M, N 
	END 
demo% f77 -silent  bz1.f 
demo% a.out 
  82 8200 
  82 82 
demo% 

空白制御の以下の規則に注意してください。

キャリッジ制御 ($、スペース、0、1)

キャリッジ制御として、編集記述子の $ およびスペース、0または 1 を使用します。

ドル記号 $

特殊編集記述子 $ は、キャリッジリターンを抑止します。©

この処理は書式の第 1 文字に依存しません。$ は一般にコンソールプロンプトに使用されます。たとえば入力応答が出力されたプロンプトと同じ行に続くようにするために、この記述子を使用することができます。この編集記述子は、コロン (:) と同じ規則によって制約されます。

例: $ 記号のキャリッジ制御

* dol1.f  スペースを伴う $ 編集記述子 
	WRITE ( *, 2 ) 
2	FORMAT (' ノード番号を入力してください: ', $ ) 
	READ ( *, * ) NODENUM 
	END 

上記のプログラムにより、次のようなプロンプトとユーザーの入力応答が表示されます。

ノード番号を入力してください:  82 

書式の第 1 文字には、この場合空白が出力されます。入力文の場合 $ 記述子は無視されます。

スペース、0、1、+

以下に改行制御とその動作を示します。

表 5-4   空白、0、1、+ によるキャリッジ制御
文字 出力に先立つ行送り
D (スペース)
1 行
0
2 行
1
次ページの最初の行へ行送り
+
改行なし (標準出力のみ、ファイルでは無効)


書式の第 1 文字が スペース、01+ 以外のときは、スペースとして扱われ出力されません。

最初の桁の文字が + の場合、前の行の先頭に戻るような制御シーケンスに置き換えられます。

asa を通じてパイプされていると、スペース、01、および + は標準出力に対して働きます。

例:第 1 文字の書式化、標準出力が asa を介してパイプされます。

demo% cat slew1.f
	WRITE( *, '("abcd")') 
	WRITE( *, '(" efg")')  空白はスペース 1 つ
	WRITE( *, '("0hij")')  "0" はダブルスペース
	WRITE( *, '("1klm")')  "1" はこれを新しいページで始める
	WRITE( *, '("+", T5, "nop")')   "+" は最終行の 1 桁目でこれを始める
	END
demo% f77 -silent slew1.f
demo% a.out | asa | lpr
demo%

次のようにプログラム slew1.f は、lp で印刷するとファイル slew1.out を作成します。

bcd
efg

hij
klmnop これは新しいページに始まる+nop + のため

画面では結果が違います。タブがスペースを挿入します。

demo% cat slew1.out
bcd
efg

 
hij
   nop             これは新しいページに始まる。+nop   +  のため
demo% 

asa(1) を参照してください。

スペース、0、 1 および + は、次のような条件で開いたファイルに対して動作します。

例: 第 1 文字書式、ファイル出力

demo% cat slew2.f
	OPEN( 1,FILE='slew.out',FORM='PRINT' ) 
	WRITE( 1, '("abcd")') 
	WRITE( 1, '("efg")') 
	WRITE( 1, '("0hij")') 
	WRITE( 1, '("1klm")') 
	WRITE( 1, '("+", T5, "nop")') 
	CLOSE( 1, STATUS='KEEP') 
	END
demo% f77 -silent slew2.f
demo% a.out

次のようにプログラム slew2.f は、lp で印刷するとファイル slew2.out を作成します。ファイル slew2.out は、前述したファイル slew1.out と同じです。

1改行制御コード '0''1''+' は、出力ファイルの中でそれぞれ
' \n'、' \f' と ' \r' に置換されます。

文字編集 (A)

A 形指定子は文字型データ項目に使用されます。一般書式を次に示します。

A[w] 

入力時、文字データは対応する並びの項目内に格納されます。

出力時、対応する並びの項目が文字データとして表示されます。

w が省略されると、次のようになります。

さまざまな n の値についてサイズ変数 n (CHARACTER*n) を読み取る例を以下に示します。たとえば、n=9 のときは次のとおりです。

	CHARACTER C*9 
	READ '( A7 )', C 

CHARACTER C*n のさまざまな n の値を以下の表に示します。

サイズ n
9
7
4
1
データ

NodeDId

NodeDId NodeDId NodeDId
書式

A7

A7 A7 A7
メモリー

NodeDIdDD

NodeDId eDId d


D は空白のスペースを示します。

出力例: 3 文字、5 文字、および 7 文字の文字列の出力 (それぞれ 5 文字の欄に出力)

	PRINT 1, 'The', 'whole', 'shebang' 
1	FORMAT( A5 / A5 / A5 )
	END 

上記のプログラムは次のように表示します。

DDThe 
whole 
sheba 

文字でない型の最大文字数を次にまとめます。

表 5-5   文字以外の型ホレリス (nHaaa) の最大文字数
並び項目の型 最大文字数
BYTE
LOGICAL*1
LOGICAL*2
LOGICAL*4
LOGICAL*8
INTEGER*2
INTEGER*4
INTEGER*8
REAL
REAL*4
REAL*8
REAL*16 (SPARC のみ)
DOUBLE PRECISION
COMPLEX
COMPLEX*8
COMPLEX*16
COMPLEX*32 (SPARC のみ)
DOUBLE COMPLEX
1
1
2
4
8
2
4
8
4
4
8
16
8
8
8
16
32
16


f77 では FORMAT 文、代入文、および DATA 文の中で文字定数が使用できるときは、どのような場合でもホレリス定数を使用できます。© これら定数はお勧めできません。Fortran 77 規格は、旧プログラムとの互換性を改善するためホレリス機能を備えることを勧めていますが、Fortran 77 はこれら旧ホレリス (nH) 表記法を持っていません。このような定数は並びによる入力または変数群入力の入力データ要素として使用できません。

たとえば、次の 2 つの書式は等価です。

10 	FORMAT( 8H Code = , A6 ) 
20 	FORMAT( ' Code = ', A6 )

f77 では、編集記述子間のコンマは一般に省略可能です。

10 	FORMAT( 5H flex 4Hible ) 

ホレリス編集記述子への読み込み

旧プログラムとの互換性のため、f77 もホレリス編集記述子へ読み込むことが
できます。©

例: ホレリス編集記述子への読み込み。READ 文に並びがないことに注意してください。

demo% cat hol1.f 
	WRITE( *, 1 ) 
1 	FORMAT( 6Holder ) 
	READ( *, 1 ) 
	WRITE( *, 1 ) 
	END 
demo% f77 hol1.f 
hol1.f: 
 MAIN 
demo% a.out 
older 
newer 
newer 
demo%  

上記の例で書式が実行時書式 (変数書式) のときは、上記の実際の書式への読み込みは行われず、書式は変更されないままです。つまり、次のような読み込みは失敗します。

	CHARACTER F*18 / '(A8)' / 
	READ(*,F)			! <- 読み込みは行われない 
	... 

どちらにしても、実際の書式へ読み込むためのより良い方法があることは明らかです。

整数編集 (I)

I 形指定子は 10 進整数データ項目に使用されます。一般書式を次に示します。

I[w[.m]]

IwIw.m 編集指定子は、編集する欄が w 桁を占めることを示します。指定された入出力並びの項目は整数型でなければなりません。入力時に指定される並びの項目は、整数データで定義されることになります。出力時に指定される並びの項目は、整数データとして定義されなければなりません。

入力時には、Iw.m 編集指定子は Iw 編集指定子と同等に扱われます。

Iw 編集指定子の出力欄は以下のものから構成されます。

整定数は少なくとも 1 桁を持ちます。

Iw.m 編集指定子の出力欄は、符号なし整定数が少なくとも m 桁で構成され、必要に応じて先行のゼロを持つこと以外は、Iw 編集指定子と同じです。m の値は w の値を超えてはなりません。m がゼロで項目の値もゼロのときは、有効な符号制御に関係なく、出力欄は空白文字だけで構成されます。

例: int1.f、整数入力

	CHARACTER LINE*8 / '12345678' / 
	READ( LINE, '(I2, I3, I2 )') I, J, K 
	PRINT *, I, J, K 
	END 

上記のプログラムは次のように表示されます。

     12 345 67

例: int2.f、整数出力

	N = 1234 
	PRINT 1, N, N, N, N 
1	FORMAT( I6 / I4 / I2 / I6.5 ) 
	END 

上のプログラムは次のように表示します。

  1234 
1234 
** 
01234 

論理編集 (L)

L 形指定子は論理データ項目に使用されます。一般書式を次に示します。

 Lw

Lw 編集指定子は欄が w 桁を占めることを示します。指定された入出力並びの項目は論理型でなければなりません。入力時には並びの項目は論理データで定義されることになります。出力時には並びの項目は論理データとして定義されなければなりません。

入力欄は省略可能な空白、その後に省略可能な小数点、さらにその後に真のときは T、偽のときは F が続きます。T または F の後の欄内に文字を付けることが可能です。論理定数 .TRUE. と .FALSE. は入力として受け入れられます。出力欄は w-1 個の空白の後に真のときは T、偽のときは F が続きます。

例: log1.f、論理出力

	LOGICAL A*1 /.TRUE./, B*2 /.TRUE./, C*4 /.FALSE./ 
	PRINT '( L1 / L2 / L4 )', A, B, C 
	END 

上記のプログラムは次のように表示します。

T 
DT 
DDDF 

例: log2.f 、論理入力

	LOGICAL*4 A 
1	READ '(L8)', A 
	PRINT *, A 
	GO TO 1 
	END 

上記のプログラムは次の入力データを有効なデータとして受け入れます。

t true T TRUE .t .t. .T .T. .TRUE. TooTrue 
f false F FALSE .f .F .F. .FALSE. Flakey 

8 進および 16 進編集 (O,Z)

FORMAT 文の O 形と Z 形欄記述子はそれぞれ 8 進または 16 進整数用ですが、それらはどのデータの型でも使用できます。©

一般書式は次のとおりです。

Ow[.m] 
Zw[.m] 

ここで w は外部欄内の文字数であり、出力の場合 m が指定されている時は、外部欄内の合計桁数が決定されます (つまり m 個に満たないゼロでない桁がある場合、その欄は合計で m 桁になるまで左側にゼロが満たされます)。m は入力には影響を与えません。

8 進および 16 進入力

FORMATO 形または Z 形欄記述子を持つ READ は、それぞれ 8 進または 16 進整数として w 文字を読み込み、対応する入出力並びのメンバーに値を割り当てます。

例: 8 進入力時の外部データ欄

654321 

上記の最初の桁は、1 桁目から入力します。

入力を行うプログラムは次のとおりです。

	READ ( *, 2 ) M 
2	FORMAT ( O6 ) 

上記のようなデータとプログラムでは、8 進値 654321 が変数 M に読み取られます。さらに詳しい例を次の表に示します。

表 5-6   8 進/16 進入力値の例 
書式 外部欄 内部 (8 進または 16 進) 値
O4 1234D 1234
O4 16234 1623
O3 97DDD エラー: 9 は許可されない
Z5 A23DED A23DE
Z5 A23DEF A23DE
Z4 95.AF2 エラー: ピリオド (.) は許可されない


8 進および 16 進入力の一般規則は、次のとおりです。

8 進および 16 進出力

FORMATO 形または Z 形欄記述子を持つ WRITE は、それぞれ 8 進または 16 進整数として値を書き出します。w 文字の幅の欄に右詰めで書き込まれます。

例: 16 進出力

	M = 161 
	WRITE ( *, 8 ) M 
8 	FORMAT ( Z3 ) 
	END

上記のプログラムは A1 (10 進数 161=16 進数 A1) を表示します。

DA1 

文字 A が出力桁 2 に書き込まれます。

さらに詳しい例を次の表に示します。

表 5-7   8 進/16 進出力値の例
書式 内部 (10 進) 値 外部 (8 進または 16進) 表現
O6 32767 D77777
O2 14251 **
O4.3 27 D033
O4.4 27 0033
O6 -32767 *****
Z4 32767 7FFF
Z3.3 2708 A94
Z6.4 2708 DD0A94
Z5 -32767 ******


8 進および 16 進出力の一般規則は、次のとおりです。

位置付け編集

f77 は出力行に沿った水平位置付けに関しては、書式 Tn、TLn、TRnnT、および nX をサポートします。ここで n は正の整数でなければなりません。書式指定子 T は単独に、または正のゼロでない数の前後に置くことができます。

Tn -- 絶対値桁

タブは n 番目の桁から読み取るか、または n 番目の桁へ書き込みます。n がないときは、T1 として処理されます。

TLn -- 相対桁

タブは左側の n 番目の桁から読み取るか、または左側の n 番目の桁へ書き込みます n がないときは、TL0 として処理されます。©

TRn -- 相対桁

タブは右側の n 番目の桁から読み取るか、または右側の n 番目の桁へ書き込みます n がないときは、TR0 として処理されます。©

nT -- 相対タブストップ ©

タブにより読み取りのときも書き込みのときも、n 番目のタブストップに移動します。n が省略されると n=1 が使用され、次のタブストップに移動します。(この編集は、FORTRAN 77 の規格外です。)

タブ操作の規則と制限事項は、次のとおりです。

nX -- 位置

nX 編集指定子は記録への、または記録からの次の文字の転送を現在の位置から n 文字先の位置で行うことを指示します。

入力時、nX 編集指定子は記録ポインタを n 桁進めるので、n 文字スキップします。

記録の最終文字を越えた位置は、この位置から文字が転送されない場合は指定することができます。

出力時、nX 指定子は n 個の空白を書き込みます。

n のデフォルト値は 1 です。

例: 入力 Tn (絶対タブ)

demo% cat rtab.f 
	CHARACTER C*2, S*2 
	OPEN( 1, FILE='mytab.data') 
	DO I = 1, 2 
	READ( 1, 2 ) C, S 
2	FORMAT( T5, A2, T1, A2 ) 
	PRINT *, C, S 
	END DO 
	END 
demo%

2 行のデータファイル

demo% cat mytab.data 
defguvwx 
12345678 
demo% 

実行および出力

demo% a.out 
uvde 
5612 
demo% 

上記の例では、まず桁 5 と 6 を、次に桁 1 と 2 を読み取ります。

例: 出力 Tn (絶対タブ) ― このプログラムは出力ファイルを書き込みます。

demo% cat otab.f 
	CHARACTER C*20 / "12345678901234567890" / 
	OPEN( 1, FILE='mytab.rep') 
	WRITE( 1, 2 ) C, ":", ":" 
2	FORMAT( A20, T10, A1, T20, A1 ) 
	END 
demo%  

出力ファイル

demo% cat mytab.rep 
123456789:123456789: 
demo% 

上記の例は 20 文字を書き込み、桁 10 と 20 を変更しました。

例: 入力 TRn および TLn (相対タブ) ― プログラム

demo% cat rtabi.f 
	CHARACTER C, S, T 
	OPEN( 1, FILE='mytab.data') 
	DO I = 1, 2 
	READ( 1, 2 ) C, S, T 
2	FORMAT( A1, TR5, A1, TL4, A1 ) 
	PRINT *, C, S, T 
	END DO 
	END 
demo%  

2 行のデータファイル

demo% cat mytab.data 
defguvwx 
12345678 
demo%  

実行と出力

demo% a.out 
dwg 
174 
demo%  

上記の例は、桁 1 を読み取ってから桁 7 まで 5 桁右に移動し、その後桁 4 まで 4 桁左に移動します。

例: TRnTLn の出力 (相対タブ) ― このプログラムは出力ファイルを書き込みます。

demo% cat rtabo.f 
	CHARACTER C*20 / "12345678901234567890" / 
	OPEN( 1, FILE='rtabo.rep') 
	WRITE( 1, 2 ) C, ":", ":" 
2	FORMAT( A20, TL11, A1, TR9, A1 ) 
	END 
demo%  

実行しても何も表示しませんが、mytab.rep 出力ファイルを見ることができます。

demo% cat rtabo.rep 
123456789:123456789: 
demo%  

上記のプログラムは 20 文字を書き込んでから桁 10 まで 11 桁左に移動し、その後桁 20 まで 9 桁右に移動します。

引用符編集 ("aaa")

引用符編集指定子は文字定数の書式を使用します。© 引用符編集指定子は編集指定子自身が囲んだ文字 (空白を含みます) を書き込みます。引用符編集指定子は入力に使用してはなりません。

欄の幅は区切り用引用符の間に含まれる文字数ですが、区切り用の引用符は含みません。欄内にあって間に空白がない 2 個の連続する引用符は、1 個の引用符として数えられます。同様の方法でアポストロフィを使用することができます。

例: quote.f (等価な 2 つの方法)

	WRITE( *, 1 ) 
1	FORMAT( 'これは引用符 " です。' ) 
	WRITE( *, 2 ) 
2	FORMAT( "これは引用符 "" です。" ) 
	END 

これはメッセージ「これは引用符 " です」を 2 回書き込みます。

基数制御 (R)

書式指定子は R または nR です。ただし 2≦n≦36 です。n が省略されると、デフォルトの 10 進基数が復元されます。

基数制御により書式付き整数入出力変換に 10 以外の基数を指定することができます。この指定子は浮動小数点変換の桁移動 P にならっています。他の基数が指定されるか、または書式解釈が終了するまでは効果を持ち続けます。入出力項目は 32 ビット整数として扱われます。

例: 基数が 16 で、符号なし、16 進の整数、10 の幅を持ち、8 桁までゼロで満たす書式は (su,16r,I10.8) となります。

demo% cat radix.f 
	integer i / 110 / 
	write( *, 1 ) i 
1	format( su, 16r, I10.8 ) 
	end 
demo% f77 -silent radix.f 
demo% a.out 
 DD0000006E
demo% 

SU については、「符号編集 (SU、SP、SS、S)」で説明します。

実数編集 (D、E、F、G)

D 形、E 形、F 形、および G 形指定子は、10 進の実数データ項目に使用されます。

D 形編集

D 形指定子は 10 進倍精度項目の指数書式に使用されます。一般書式を次に示します。

D[w[.d]]

Dw および Dw.d 形編集指定子は、編集する欄が w 桁を占めることを示します。d は数の小数部 (小数点の右側の部分) が d 桁であることを示します。しかし入力データが小数点を持つ場合は、その小数点が d の値を無効にします。

入力時に指定される並びの項目は、実数データで定義されることになります。出力時に指定される並びの項目は、実数データとして定義されなければなりません。

出力文では、E の代わりに D が使用されること以外は、D 形編集記述子が E 形編集記述子と同じことを行います。Dw.d 形編集指定子に対する出力欄は幅 w を持ちます。値は欄に右詰めされます。欄はゼロまたは 1 個以上の先行する空白の次にマイナス (値が負のとき) または省略可能なプラスがあり、さらに d 桁の 10 進数に丸められた並び項目の値の大きさが続きます。

w は、マイナス符号、小数点の左側の 1 桁以上の数字、小数点、および小数点の右側の
d 桁までの数字を許可しなければなりません。したがって、この場合 wd+3 でなければなりません。

例: D 形編集を設定した実入力。プログラム Dinp.f

	CHARACTER LINE*24 / '12345678 23.5678 .345678' / 
	READ( LINE, '( D8.3, D8.3, D8.3 )') R, S, T 
	PRINT '( D10.3, D11.4, D13.6 )', R, S, T 
	END 

上記のプログラムは次のように表示されます。

0.123D+05 0.2357D+02 0.345678D+00 

上記の例で最初の入力データ項目は小数点を持たないので D8.3 が小数点を決定します。その他の入力データ項目は小数点を持つので、小数点に関する限りこれらの小数点が
D 形編集記述子を無効にします。

例: D 形編集を設定した実出力。プログラム Dout.f

	R = 1234.678 
	PRINT 1, R, R, R 
1	FORMAT( D9.3 / D8.4 / D13.4 ) 
	END

上記のプログラムは次のように表示します。

0.123D+04 
******** 
DDD0.1235D+04 

上記の例で 2 番目の出力行は D8.4 が符号を許可しないのでアスタリスクになり、3 番目の出力行は D13.4 の結果として先頭に 3 個の空白がきます。

E 形編集

E 形指定子は 10 進の実数データ項目の指数書式に使用されます。一般書式を次に示します。

  E[w[.d][Ee]]

w は編集する欄が w 桁を占めることを示します。

d は数の小数部 (小数点の右側の部分) が d 桁であることを示します。しかし入力データが小数点を持つ場合は、その小数点が d の値を無効にします。

e は指数欄の桁の数を示します。デフォルトは 2 になります。

指定される入出力並びの項目は実数型の項目でなければなりません。入力時に指定される並びの項目は実数データで定義されることになります。出力時に指定される並びの項目は実数データとして定義されなければなりません。

Ew.d 形編集指定子に対する出力欄は幅 w を持ちます。値はその欄に右詰めされます。欄はゼロまたは 1 個以上の先行する空白のあとに、マイナス (値が負のとき) または省略可能なプラスが続き、さらにゼロ、小数点、d 桁の 10 進数に丸められた並びの項目の値の大きさおよび指数が続きます。

書式 Ew.d は指数の絶対値によって以下のようになります。

書式 Ew.dEe は、|指数| (10e) -1 ならば、指数は書式 nnn になります。

書式 Dw.d は指数の絶対値によって以下のようになります。

ここで n は任意の数字です。

指数には符号が必要です。

w はマイナス符号を許可する必要はありませんが、ゼロ、小数点、および小数点の右側の d 桁の数字、および指数を許可しなければなりません。したがって、負数でないときは w d+6 ですが、 e があれば w d+e+4 です。負数のときは w d+7 ですが、 e があれば w d+e+5 です。

例: E 形編集を設定した実入力。プログラム Einp.f

	CHARACTER L*40/'1234567E2 1234.67E-3 12.4567 '/ 
	READ( L, '( E9.3, E12.3, E12.6 )') R, S, T 
	PRINT '( E15.6, E15.6, E15.7 )', R, S, T 
	END 

上記のプログラムは次のように表示します。

DDD0.123457E+06DDD0.123467E+01DD0.1245670E+02 

上記の例で最初の入力データ項目は小数点を持たないので E9.3 が小数点を決定します。その他の入力データ項目は小数点を持つので、小数点に関する限りこれら小数点が D 形編集記述子を無効にします。

例: E 形編集を設定した実出力。プログラム Eout.f

	R = 1234.678 
	PRINT 1, R, R, R 
1	FORMAT( E9.3 / E8.4 / E13.4 ) 
	END 

上記のプログラムは次のように表示します。

0.123E+04 
******** 
DDD0.1235E+04 

上記の例で E8.4 は符号を許可しないのでアスタリスクが出力されます。また E13.4 の余分な幅の欄は 3 個の先行する空白になります。

例: Ew.dEe 形編集を設定した実出力。プログラム EwdEe.f

	REAL  X / 0.000789 /
	WRITE(*,'( E13.3)') X
	WRITE(*,'( E13.3E4)') X
	WRITE(*,'( E13.3E5)') X
	END

このプログラムは次のように表示します。

DDDD0.789E-03
DD0.789E-0003
D0.789E-00003

F 形編集

F 指定子は 10 進の実数データ項目に使用されます。一般書式を次に示します。

   F[w[.d]]

FwFw.d 形編集指定子は編集する欄が w 桁を占めることを示します。

d は数の小数部 (小数点の右側の部分) が d 桁であることを示します。しかし入力データが小数点を持つ場合は、その小数点が d の値を無効にします。

指定される入出力並びの項目は、実数型の項目でなければなりません。入力時に指定される並びの項目は、実数データで定義されることになります。出力時に指定される並びの項目は、実数データとして定義されなければなりません。

Fw.d 形編集指定子に対する出力欄は幅 w を持ちます。値はその欄に右詰めされます。欄はゼロまたは 1 個以上の先行する空白のあとにマイナス (値が負のとき) または省略可能なプラスが続き、さらにその次に d 桁の 10 進数に丸められた並びの項目の値の大きさが続きます。

w はマイナス符号、小数点の左側の 1 桁以上の数字、小数点、および小数点の右側の
d 桁の数字を許可しなければなりません。したがってこの場合は、w d+3 でなければなりません。

例: F 形編集を設定した実入力。プログラム Finp.f

	CHARACTER LINE*24 / '12345678 23.5678 .345678' / 
	READ( LINE, '( F8.3, F8.3, F8.3 )') R, S, T 
	PRINT '( F9.3, F9.4, F9.6 )', R, S, T 
	END 

上記のプログラムは次のように表示します。

12345.678DD23.5678D0.345678

上記の例で、最初の入力データ項目は小数点を持たないので、F8.3 が小数点を決定します。その他の入力データ項目は小数点を持つので、小数点に関する限りこれら小数点が F 形編集記述子を無効にします。

例: F 形編集を設定した実出力。プログラム Fout.f

	R = 1234.678 
	PRINT 1, R, R, R 
1	FORMAT( F9.3 / F8.4 / F13.4 ) 
	END

上記のプログラムは次のように表示します。

D1234.678 
******** 
DDDD1234.6780

上記の例で F8.4 は符号を許可しません。F13.4 により 先頭に 4 個の空白がきて、後ろに 1 個のゼロがきます。

G 形編集

G 形指定子は 10 進の実数データ項目に使用されます。一般書式を次に示します。

G[w[.d]]  
あるいは

Gw.dEe 

D、E、F、および G 形編集指定子は同じ方法でデータを解釈します。

G 形編集記述子による出力の表現は内部データの大きさに左右されます。次の表で N
内部データの大きさを示します。

範囲 書式
 0.1  N < 1.0 
 1.0 N < 10.0 
... 
 10(d-2)  N 10(d-1)
 10(d-1)  N < 10d 
 F(w-4).d 
 F(w-4).(d-1)
... 
 F(w-4).1
 F(w-4).0


書式付き入力のコンマ

固定桁書式で制御される数値データを入力するとき、コンマを使用して桁の制限を無効にすることができます。

例: 書式

	(I10, F20.10, I4) 

上記の書式を使用すれば次の記録を正しく読み取ることができます。

-345,.05e-3,12 

入出力システムは FORTRAN 77 規格に記述されているよりも寛大になっています。一般に文字以外の変数の書式付き読み取りを行う場合、コンマは欄の長さを変更します。正確に言うと IwFw.dFw.d[Ee]、および Gw.d の入力欄の場合、w 個の文字が走査されるか、またはコンマがあると欄は終了します。コンマで終了したとき欄はコンマまでの文字を含みますが、コンマは含みません。次の欄はコンマの次の文字で始まります。

残存文字 (Q)

Q 形編集記述子は入力記録の長さ、または入力記録の読み取られていない残存部分の長さを知るために使用されます。©

現在の記録から読み取るべき残り文字数を獲得します。

例: 実数と文字列からの実数、文字列長、および文字列の獲得

demo% cat qed1.f 
* qed1.f Q edit descriptor (real & string) 
	CHARACTER CVECT(80)*1 
	OPEN ( UNIT=4, FILE='qed1.data' ) 
	READ ( 4, 1 ) R, L, ( CVECT(I), I=1,L ) 
1 	FORMAT ( F4.2, Q, 80 A1 ) 
	WRITE ( *, 2 ) R, L, '"', (CVECT(I),I=1,L), '"' 
2 	FORMAT ( 1X, F7.2, 1X, I2, 1X, 80A1 ) 
	END 
demo% cat qed1.data 
8.10qwerty 
demo% f77 qed1.f -o qed1 
qed1.f: 
 MAIN: 
demo% qed1 
   8.10 6 "qwerty" 
demo% 

上記の例は、変数 R に欄を読み込んでからその欄の後に残っている文字数を L に読み込み、それから L の文字を CVECT に読み込みます。n 番目の編集記述子としての Q は、READ 並び内の n 番目の要素としての L と一致します。

例: 入力記録の長さの獲得。Q 記述子を最初に設定。

demo% cat qed2.f 
	CHARACTER CVECT(80)*1 
	OPEN ( UNIT=4, FILE='qed2.data' ) 
	READ ( 4, 1 ) L, ( CVECT(I), I=1,L ) 
1	FORMAT ( Q, 80A1 ) 
	WRITE ( *, 2 ) L, '"', (CVECT(I),I=1,L), '"' 
2	FORMAT ( 1X, I2, 1X, 80A1 ) 
	END 
demo% cat qed2.data 
qwerty 
demo% f77 qed2.f -o qed2 
qed2.f: 
 MAIN: 
demo% qed2 
  6 "qwerty" 
demo% 

上記の例は入力記録の長さを獲得します。これで入力文字列全体とその長さについてはユーザー自身が解析することができます。

Q 編集記述子の制限事項は、次のとおりです。

桁移動 (P)

P 形編集記述子は実数の入力値を 10 のべき乗だけ桁移動します。出力値に対しては、表示される有効数字を制御します。

一般書式を次に示します。

パラメータ
説明
k
符号なしまたは符号付きの整定数


[k] P

k は桁移動数と呼ばれ、そのデフォルト値はゼロです。

例: 桁移動数を設定した入出力文

	READ ( 1, '( 3P E8.2 )' ) X 
	WRITE ( 1, '( 1P E8.2 )' ) X 

P 自身だけのときは 0P と等価です。P は桁移動数をデフォルト値 0P にリセットします。P 単独は規格外です。©

有効範囲

桁移動数は、各入出力文の実行を開始する時にゼロにリセットされます。桁移動数は D、E、F、および G 形編集記述子に適用されます。

入力

入力時、指数欄を持たない外部データは、10k で除算されてから内部的に格納されます。

入力例: データ、桁移動数、および結果として記憶される値

データ

18.63

18.63

18.63E2

18.63

書式
E8.2
3P E8.2
3P E8.2
-3P E8.2 
メモリー
18.63
.01863
18.63E2
18630. 

出力

D 形、E 形記述子を使用する出力、または E 形編集に対応する G 形記述子を使用する出力時に、内部項目は基本の実定数部に 10k を乗じられ、指数部は k だけ減らされて、書き出されます。

F 形記述子を使用する出力、および F 形編集に対応する G 形記述子を使用する出力時に、内部項目は基本の実定数部分に 10k を乗じられた後に書き出されます。

出力例: 格納される値、桁移動数、および結果の出力

メモリー 290.0
290.0
290.0
290.0
書式
2P E9.3
1P E9.3
-1P E9.3
F9.3 
表示
29.00E+01
2.900E+02
0.029E+04
0.290E+03 

符号編集 (SU、SP、SS、S)

SU 形、SP 形、および S 形編集記述子は先行する符号の出力を制御します。特殊な符号指定子がない通常の出力の場合、値が負のときはマイナス符号が左端の桁の 1 桁左に出力されます。値が正のときは処理系によってはプラス符号が出力されますが、f77 はプラス符号を省略します。

以下の符号指定子が使用できます。

たとえば符号なし指定子は、次に示すように基数指定子とともに使用して、16 進数ダンプを書式化することができます。

2000 	FORMAT( SU, 16R, 8I10.8 ) 

符号制御の規約と制限事項は次のとおりです。

スラッシュ編集 (/)

スラッシユ (/) 編集指定子は現在の記録におけるデータ転送の終了を指示します。

順番探査

入力時は現在の記録の残りの部分を無視し、ファイルは次の記録の先頭に位置付けられます。2 個の連続するスラッシュ (//) は記録全体を無視します。

出力時は記録終了が書き込まれ、新しい記録が開始されます。2 個の連続するスラッシュ (//) は文字なしの記録を作成します。ファイルが内部ファイルのとき、その記録は空白で満たされます。

直接探査

各スラッシュは記録番号を 1 つずつ増やし、ファイルをその番号の記録の先頭に位置付けます。

出力時、2 個の連続するスラッシュ (//) は文字なしの記録を作成します。その記録は空白で満たされます。

終了制御 (:)

コロン (:) 編集記述子により書式を条件付きで終了することができます。入出力並びが書式の途中で尽きると書式はコロンで終了します。

例: 終了制御

* col1.f コロン (:) 編集記述子 
	DATA INIT / 3 /, LAST / 8 / 
	WRITE ( *, 2 ) INIT 
	WRITE ( *, 2 ) INIT, LAST 
2	FORMAT ( 1X 'INIT = ', I2, :, 3X, 'LAST = ', I2 ) 
	END 

上記のプログラムは、次のような出力を生成します。

	INIT = 3 
	INIT = 3 LAST = 8 

コロンがないと出力は次のようになります。

	INIT = 3 LAST = 
	INIT = 3 LAST = 8 

実行時書式

実行中に変更可能な書式指定子をオブジェクトの中に設定することができます。これによって柔軟性が向上します。この種類の書式指定子は、入出力文が実行されるたびに解析されるので、実行時間は増加します。これらは変数書式とも呼ばれます。

オブジェクトは以下の種類のいずれかでなければなりません。

区切るのに左右の括弧が必要です。ただしキーワード FORMAT と文番号は除きます。

オブジェクトは書式全体を設定するのに十分な大きさで宣言しなければなりません。たとえば、'(8X,12I)' は INTEGER*4 または CHARACTER*4 オブジェクトには適しません。

例: 文字式と整数配列の実行時書式

demo% cat runtim.f 
	CHARACTER CS*8 
	CHARACTER CA(1:7)*1 /'(','1','X',',','I','2',')'/ 
	CHARACTER S(1:7)*6 
	INTEGER*4 IA(2) 
	STRUCTURE / STR / 
	CHARACTER*4 A 
	INTEGER*4 K 
	END STRUCTURE 
	CHARACTER*8 LEFT, RIGHT 
	RECORD /STR/ R 
	N = 9 
	CS = '(I8)' 
	WRITE( *, CS ) N	! 文字スカラー 
	CA(2) = '6' 
	WRITE( *, CA ) N	! 文字配列
	S(2) = '(I8)' 
	WRITE( *, S(2) ) N	! 文字配列の要素
	IA(1) = '(I8)' 
	WRITE(*, IA ) N		! ! 整数配列
	R.A = '(I8)' 
	WRITE( *, R.A ) N	! 記録の欄
	LEFT = '(I' 
	RIGHT = '8)' 
	WRITE(*, LEFT // RIGHT ) N ! つなげる
	END 
demo% f77 -silent runtim.f 
demo% a.out 
       9 
       9 
       9 
       9 
       9 
       9 
demo% 

書式内の変数式 (<e>)

一般に FORMAT 文内の整定数は任意の式で置換することができます。©

式自身は山括弧で囲まなければなりません。

例を次に示します。

1	FORMAT( 3F6.1 ) 

上記の文の 6 は、次のように変数 N で置換可能です。

1	FORMAT( 3F<N>.1 )

または次のように、さらに複雑な式 2*N+M でも置換可能です。

1	FORMAT( 3F<2*N+M>.1 )

同様に、3 または 1 を任意の式で置換することができます。

ただ 1 つの例外は nH... 編集記述子の n です。

書式内の変数式に対する規則と制限事項は、以下のとおりです。

書式なし入出力

書式なし入出力は、2 進情報をその内部表現を変更することなく、メモリーとの間で転送するために使用されます。書式なし入出力文の実行のたびに単一の論理記録の読み取り、または書き込みが行われます。内部表現はアーキテクチャにより異なるので、書式なし入出力は移植性に限界があります。

書式なし入出力を使用して一時的にデータを書き出したり、または迅速にデータを書き出して同一アーキテクチャを持つマシン上で実行される別の Fortran 77 プログラムに入力することができます。

順番探査入出力

書式なし順番探査ファイルの論理記録長は、入出力並び中の項目が必要とするバイト数により異なります。この入出力書式の要求条件により、外部物理記録サイズは論理記録サイズよりいくらか大きくなります。

例:

	WRITE( 8 ) A, B 

Fortran 77 実行時システムは、書式なし順番 WRITE 中にデータ中の記録境界として、各書式なし順番記録の始めと終わりに INTEGER*4 でバイト数を挿入します。記録の終わりのバイト数により、記録の BACKSPACE 操作が可能になります。結果として Fortran 77 プログラムは、書式なし順番 WRITE 操作で書き込まれたデータについてだけ書式なし順番 READ を使用することができます。このような記録を書式付きとして読み取ろうとすると、その結果は予測できません。

以下にガイドラインを示します。

直接探査入出力

複数の入出力並びが異なった長さのとき、RECL=1 オプションを設定してファイルを開くことができます。このオプションは読み取り、または書き込みを行う項目の数を決定するために入出力並びを使用することを Fortran 77 に知らせます。

ユーザーはさらに各読み取りごとに、読み取りを開始する最初の記録 (この場合どのバイトからか) を Fortran 77 に知らせる必要があるため、各項目のサイズを知っておかなければなりません。©

簡単な例を以下に示します。

例: 直接探査 -- それぞれ 2 つの整数からなる記録を 3 個作成する

demo% cat Direct1.f
	integer u/4/, v /5/, w /6/, x /7/, y /8/, z /9/
	open( 1, access='DIRECT', recl=8 )
	write( 1, rec=1 ) u, v
	write( 1, rec=2 ) w, x
	write( 1, rec=3 ) y, z
	end
demo% f77 -silent Direct1.f
demo% a.out
demo%

例: 直接探査 -- 3 つの記録を読み取る

demo% cat Direct2.f
	integer u, v, w, x, y, z
	open( 1, access='DIRECT', recl=8 )
	read( 1, rec=1 ) u, v
	read( 1, rec=2 ) w, x
	read( 1, rec=3 ) y, z
	write(*,*) u, v, w, x, y, z
	end
demo% f77 -silent Direct2.f
demo% a.out
  4  5  6  7  8  9
demo%

ファイル上の記録長がわかります。この例では、書き込まれたとおりにファイルを読み込むことができます。

ただし、ファイル上の記録長ではなく各項目のサイズがわかれば、OPEN 文で 、recl=1 を使用して、入出力並びによって読み込む項目の数を確定することができます。

例: 直接探査読み取り、recl=1 を使用する

demo% cat Direct3.f
	integer u, v, w, x, y, z
	open( 1, access='DIRECT', recl=1 )
	read( 1, rec=1 ) u, v, w
	read( 1, rec=13 ) x, y, z
	write(*,*) u, v, w, x, y, z
	end
demo% f77 -silent Direct3.f
demo% a.out
  4  5  6  7  8  9
demo%

上記の例のように 3 整数 (12バイト) を読み取った後、ユーザーは記録 13 から次の読み取りを開始します。

\xa9 バイナリ入出力

バイナリ入出力でファイルを開くと、プログラムはレコード境界のないバイナリデータのストリームとして、データを読み書きできます。(この機能は Fortran 77 の規格外です)。©

OPEN 文における FORM = 'BINARY' オプションは次のように、そのユニットがレコードマークのない順番の書式なしファイルであると宣言します。

	OPEN(1, FORM='BINARY') 

バイナリファイルは、直接探査や書式付きとして宣言することもできません。

WRITE 文では、バイナリデータは出力並びにあるバイト数と同じバイト数が、バイトのストリームとしてファイルに書き込まれます。READ 文では、入力並びで変数が要求したデータバイト数分が読み取られます。ファイルにはレコードマーク (レコードの終わり) がないので、レコードマーク以降が読取られる可能性はありません。プログラムが検出できる状態は、異常なシステムエラーを除くとファイルの終わり (EOF) での読取りだけです。各 READ 文は以下の例のように、ファイルの次の順番のバイトを読み込むだけです。

demo>cat bin.f
                program bin
                character *25 string
                character *5 word

 
                open(1,FORM='BINARY')

 
                string = 'alphabetagammaepsilon'

 
                write(1) string
                rewind 1

 
                do 1 i=1,6
                word = '     '
                read(1) word
  1             print*, word

 
                end
demo>f77 -o binf bin.f
bin.f:
 MAIN bin:
demo>binf
 alpha
 betag
 ammae
 psilo
 n    
uio: [-1] end of file
logical unit 1, named 'fort.1'
lately: reading sequential unformatted external IO
Abort

バイナリファイルに対する INQUIRE は、FORM = パラメータの場合は 'BINARY'ACCESS = の場合は 'SEQUENTIAL'UNFORMATTED = の場合は 'YES'SEQUENTIAL の場合は 'YES' を返します。

バイナリファイルには BACKSPACE は使用できず、実行時にはエラーメッセージが出力されます。

並びによる入出力

並びによる入出力は、順番探査デバイスのための自由形式の入出力です。これを使用するには、次に示すように書式識別子としてアスタリスクを使用してください。

	READ( 6, * ) A, B, C 

並びによる入力には、次のような規則があります。

これは、4 個の複素定数、2 個の NULL 入力欄、4 個の文字列定数を意味します。

出力形式

並びによる出力により、細かい形式に煩わされずに高速で簡単に出力できます。厳密な形式が必要な場合は、書式付き入出力を使用してください。各項目に適した形式が選択され、正確な出力と簡素な出力形式が矛盾する場合は、簡素な形式が選択されます。

並びによる出力には、次のような規則があります。

例: 不正確なバイナリの表現

demo% cat lis5.f 
	READ ( 5, * ) X 
	WRITE( 6, * ) X, '    美' 
	WRITE( 6, 1 ) X 
1 	FORMAT( 1X, F13.8, ' 真実' ) 
	END 
demo% f77 lis5.f 
lis5.f: 
 MAIN: 
demo% a.out 
1.4 
    1.40000000 美 
    1.39999998 真実 
demo%  

上記の例で、正確な数値が必要な場合は、書式を指定してください。

その他に、次の点に注意してください。

例: -xl オプション有無による並びによる入出力と

demo% cat f77 bslash.f
	CHARACTER S*8 / '12\n3' / 
	PRINT *, S 
	END
demo% 

バックスラッシュ n

-xl なしで、キャリッジリターンとして \n を出力します。

demo% f77 -silent bslash.f 
demo% a.out 
12 
3 
demo% 

-xl を付けて、文字列として \n を出力します。

demo% f77 -xl -silent bslash.f 
demo% a.out 
12\n3
demo%  

          

表 5-8   並びによる出力のデフォルトの書式
書式
BYTE 
CHARACTER*n 
COMPLEX 
COMPLEX*16 
COMPLEX*32
INTEGER*2 
INTEGER*4 
INTEGER*8 
LOGICAL*1 
LOGICAL*2 
LOGICAL*4 
LOGICAL*8 
REAL 
REAL*8 
REAL*16
数字の前に 2 個の空白
A n  {n= 文字式の長さ}
'DD(', 1PE14.5E2, ',', 1PE14.5E2, ')' 'DD(', 
1PE22.13.E2' ',', 1PE22.13.E2,')' 'DD(', 
1PE44.34E3, ',', 1PE44.34E3, ')'
数字の前に 2 個の空白 
数字の前に 2 個の空白
数字の前に 2 個の空白
数字の前に 2 個の空白
L3
L3
L3
1PE14.5E2 
1PE22.13.E2
1PE44.34E4 


 

COMPLEX*32REAL*16 は、SPARC のみ使用できます。

引用符の付かない文字列

f77 の並びによる入出力を使用すると、引用符に囲まれない文字列の読み込みを行うことができます。©

文字列を数字で始めることはできません。また、分離文字 (コンマまたはスラッシュ (/))、 または空白 (スペースまたはタブ) は含まれません。バックスラッシュ (\) でエスケープしないかぎり、改行 (newline) は文字列の終わりを示します。上記の制限を満たさない文字列は、単一引用符または二重引用符で囲まなければなりません。

例: 引用符の付かない文字列の並びによる入力

	CHARACTER C*6, S*8 
	READ *, I, C, N, S 
	PRINT *, I, C, N, S 
	END 

上記のプログラムで unquoted.f を入力すると以下のように表示されます。

demo% a.out 
23 label 82 locked 
  23label 82locked 
demo%  

内部入出力

f77 は、内部入出力ができるように並びによる入出力を拡張しています。©

並びによる内部読み込みでは、入力並びが完成するかファイルの終わりになるまで文字が詰められています。並びによる内部書き込みでは、出力並びが完成するまで記録が埋められます。倍精度値の書き込みの際の論理記録オーバーフローを避けるために、内部配列要素の長さは 20 文字以上にするとよいでしょう。並びによる内部読み込みは、コマンド行の解読を簡単にするために実現されました。並びによる内部出力は避けることをお勧めします。

NAMELIST 入出力

NAMELIST 入出力を使用すると、変数の全グループの自由形式入出力、または変数のグループ内の選択された項目の入力が実行できます。©

NAMELIST 文は、変数または配列のグループを定義します。グループ名を宣言し、そのグループに属する変数および配列を指定します。

構文規則

NAMELIST 文の構文は以下のとおりです。

NAMELIST /group-name/namelist[[,] /group-name/namelist]...

パラメータ
説明
group-name
グループ名
namelist
変数または配列をコンマで分離した並び


詳細については、「NAMELIST」を参照してください。

例: NAMELIST

	CHARACTER*18 SAMPLE 
	LOGICAL*4 NEW 
	REAL*4 DELTA 
	NAMELIST /CASE/ SAMPLE, NEW, DELTA 

変数または配列は、複数の NAMELIST にリストできます。

入力データには、配列要素および文字列を入れることができます。また、入力定数データ文字列は宣言された変数の長さより短くできるため、部分列も入れることができます。

制限事項

グループ名は、NAMELIST、READ、または WRITE の各文だけに置くことができ、プログラムに対して一意でなければなりません。

並びには、定数、配列要素、仮大きさ引き継ぎ配列、構造体、部分列、記録、記録欄、ポインタ、またはポインタ基底付き変数を入れることはできません。

例: 2 個の NAMELIST 内にある変数

	REAL ARRAY(4,4) 
	CHARACTER*18 SAMPLE 
	LOGICAL*4 NEW 
	REAL*4 DELTA 
	NAMELIST /CASE/ SAMPLE, NEW, DELTA 
	NAMELIST /GRID/ ARRAY, DELTA 

上記の例で、DELTACASE グループと GRID グループの両方にあります。

出力動作

NAMELIST 出力は、WRITE 文の特殊な書式を使用します。この出力はグループ名を含むレポートを作成します。グループの各変数の名前とメモリー上の現在の値も含めます。それぞれの変数の型に従って値を書式化し、NAMELIST の入力が読み込める形式のレポートを作成します。

NAMELIST WRITE の構文は次のとおりです。

WRITE ( extu, 変数群指定子 [, iostat] [, err])

ここで、変数群指定子は次の書式を使用します。

[NML=]グループ名

また、グループ名はすでに NAMELIST 文の中で定義されたものです。

NAMELIST WRITE 文は、グループ内のすべての変数の値を NAMELIST 文と同じ順番で書き込みます。

例: NAMELIST 出力

demo% cat nam1.f 
* nam1.f Namelist output 
	CHARACTER*8 SAMPLE 
	LOGICAL*4 NEW 
	REAL*4 DELTA 
	NAMELIST /CASE/ SAMPLE, NEW, DELTA 
	DATA SAMPLE /'Demo'/, NEW /.TRUE./, DELTA /0.1/ 
	WRITE ( *, CASE ) 
	END 
demo% f77 nam1.f 
f77 nam1.f 
nam1.f: 
 MAIN: 
demo% a.out 
D&case sample= Demo , new= T, delta= 0.100000 
D&end 
demo% 

キーワード NML を省略する場合は、先頭に装置パラメータ (UNIT) を、2 番目に変数群指定子を置く必要があることに注意してください。書式指定子は置かないでください。

WRITE には次の書式も使用できます。

	WRITE ( UNIT=6, NML=CASE ) 

入力動作

NAMELIST 入力文は、第 1 桁を飛ばして第 2 桁以降で記号 $ と、指定されたグループ名を探し、次の外部記録を読み込みます。

$ グループ名が見つからない場合、入力グループはファイルの最後まで読み込まれます。

記録は入力されて、グループの中の名前と一致するデータ中の名前により値が割り当てられ、グループの中の変数のデータ型が使用されます。

入力データの中に見つからないグループの変数は、変更されません。

NAMELIST READ の構文は次のとおりです。

READ ( extu, 変数群指定子 [, iostat] [, err] [, end]) 

変数群指定子は次の書式を使用します。

[NML=]グループ名 

また、グループ名はすでに NAMELIST 文の中で定義されたものです。

例: NAMELIST 入力

	CHARACTER*16 SAMPLE 
	LOGICAL*4 NEW 
	REAL*4 DELTA, MAT(2,2) 
	NAMELIST /CASE/ SAMPLE, NEW, DELTA, MAT 
	READ ( 1, CASE ) 

この例で、グループ CASESAMPLE、NEW、DELTA の 3 個の変数と MAT で構成されます。キーワード NML を省略する場合は、キーワードの UNIT も省略しなければなりません。装置パラメータは先頭に、変数群指定子は 2 番目に置きます。書式指定子は置きません。

READ には次の書式も使用できます。

	READ ( UNIT=1, NML=CASE ) 

データ構文

NAMELIST 入力データの最初の記録は、第 2 桁以降に特殊記号の $ (ドル記号) を持ち、その後に NAMELIST グループ名が続きます。この後に、同じ記録かこれに続く記録の第 2 桁以降から始まる一連の代入文が続きます。各記録は、指定されたグループの変数に値を代入します (または 1 個以上の値を配列要素に代入します)。次に示すように、第 2 桁以降に入っているもう 1 つの $ が入力データの終わりを示します。

D$グループ名変数 = 値 [,変数 = 値,... ] $[END] 

このドル記号の代りにアンパサンド (&) を使用できます。ただし、開始と終了の区切り文字は同じものでなければなりません。END は最後の区切り文字のオプションの部分です。

入力データ代入文の書式は、以下のいずれかでなければなりません。

変数 = 値 
配列 = 値 1[, 値 2,]... 
配列(添え字)= 値 1[, 値 2,]... 
配列(添え字,添え字)= 値 1[, 値 2,]... 
変数 =文字定数 
変数 (索引:索引)=文字定数

配列に添字が付いている場合、適切な添字の個数がなければなりません。

文字定数を区切るには、引用符 (" または ') を使用してください。文字定数の詳細については、次の項を参照してください。

次のデータ例は、上記のプログラム部分で読み込むためのものです。

D$case delta=0.05, mat( 2, 2 ) = 2.2, sample='デモ' $

データは複数の行にまたがることが可能です。ここで、NEW は入力されませんでした。また、順番は NAMELIST 文の中の順番と異なります。

D$case 
Ddelta=0.05 
Dmat( 2, 2 ) = 2.2 
Dsample='Demo'
D$ 

構文規則

NAMELIST で読み込まれる入力データには、次の構文規則が適用されます。

例外: 文字定数では、記録の終わりは無視され、文字定数は次の記録へ続きます。現在の記録の最後の文字には、次の記録の 2 番目の文字が続きます。どの記録も最初の文字は無視されます。
ホレリス定数、8 進定数、16 進定数は使用できません。
代入された定数は、対応する Fortran 77 定数と同じ書式です。
定数と定数の間には、少なくとも 1 個のコンマ、スペース、またはタブが必要です。スペースまたはタブが無い場合も、1 個以上ある場合もスペース 1 個に相当します。1,2,3,1 2 3 または 1, 2, 3 などのように入力します。
文字定数の中の連続したスペースまたはタブは、圧縮されずに保持されます。
文字定数はアポストロフィ (') または引用符 (") で区切ります。ただし、どちらかを使用して文字定数を始めた場合、同じもので終了しなければなりません。アポストロフィを区切り文字として使用する場合、文字列の中にアポストロフィを入れるにはアポストロフィを 2 個続けて使用します。

例: 文字定数

Dsample='use "$" in 2'	(use "$" in 2 と解釈される) 
Dsample='don''t'	(don't と解釈される) 
Dsample="don''t"	(don't と解釈される)
Dsample="don't"	(don't と解釈される)

複素定数は、実定数または整定数を 2 個組み合わせ、それをコンマで区切り、括弧で囲みます。スペースはコンマの前後にだけ入れることができます。

論理定数は、真または偽の値の書式です。たとえば、.TRUE. または .FALSE.、もしくは .T、.F などで始まる値です。

NULL データ項目は連続する 2 個のコンマで表され、これに対応する配列要素または複素数変数の値が変更されないことを示します。 NULL データ項目は、配列要素または複素数変数についてだけ使用できます。1 個の NULL データ項目が 1 個の複素定数全体を表します。複素定数の一方の部 (虚部または実部) としては使用できません。

例: NULL データの入った変数群読み込み

* nam2.f 連続したコンマのある変数群入力 
	REAL ARRAY(4,4) 
	NAMELIST /GRID/ ARRAY 
	WRITE ( *, * ) '入力 ?' 
	READ ( *, GRID ) 
	WRITE ( *, GRID ) 
	END 

nam2.f のデータ

D$GRID ARRAY = 9,9,9,9,,,,,8,8,8,8 $

この結果、9 が配列 ARRAY の第 1 行にロードされ、4 個の要素を飛ばして 8 が第 3 行に読み込まれます。

配列専用

書式 r*c および r* は配列だけで使用できます。

書式 r*c では、定数 cr 個複写したものが配列に格納されます。ここで、r はゼロ以外の符号なし整定数で、c は任意の定数です。

例: データに反復因子がある変数群

* nam3.f 変数群 "r*c" と "r* " 
	REAL PSI(10) 
	NAMELIST /GRID/ PSI 
	WRITE ( *, * ) '入力 ?' 
	READ ( *, GRID ) 
	WRITE ( *, GRID ) 
	END 

nam3.f の入力

D$GRID PSI = 5*980 $

上記の nam3.f プログラムでは、上記の入力を読み込み、980.0 を配列 PSI の最初の 5 個の要素に読み込みます。

例: 読み飛ばされるデータのある変数群読み込み

その他の入力

D$GRID PSI = 3* 5*980 $

nam3.f プログラムは、上記の入力では最初の 3 個の要素を飛ばし、980.0 を PSI の要素
4、5、6、7、8 に読み込みます。

名前の要求

端末からの変数群入力の実行中に、使用するグループ名と変数群名を要求できます。これには、第 2 桁に疑問符 (?) を入力し、Return キーを押します。グループ名とそのグループの変数名が表示され、次の入力を待ちます。

例: 名前の要求

demo% cat nam4.f 
* nam4.f 変数群: 名前の要求 
	CHARACTER*14 SAMPLE 
	LOGICAL*4 NEW 
	REAL*4 DELTA 
	NAMELIST /CASE/ SAMPLE, NEW, DELTA 
	WRITE ( *, * ) '入力 ?' 
	READ ( *, CASE ) 
	END 
demo% f77 -silent nam4.f 
demo% a.out 
  入力 ? 
D? 				← キーボード入力 
D$case 
Dsample 
Dnew 
Ddelta 
D$end
 
D$case sample="Test 2", delta=0.03 $ ← キーボード入力
demo%  


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引