変数群順番 WRITE 文の規則

変数群順番 WRITE 文は,対応する NAMELIST 文中のオブジェクトのデータ型を使ってデータ形式を決定することにより,データを内部形式から外部形式に変換します。その後,変換されたデータは外部ファイルに書き込まれます。

一般に,出力として転送された値は,入力として転送された値と同じ書式を持ちます。

基本設定では,文字定数はアポストロフィまたは引用符によって区切られず,個々の内部のアポストロフィまたは引用符は,外部でも 1 つのアポストロフィまたは引用符によって表現されます。

この動作は,(OPEN 文中の) DELIM 指定子によって次のように変更することができます。

個々の出力文は 1 つまたは複数の完全な記録を書き込みます。

文字定数表現または複素数定数は記録全体より長くてもかまいません。複素数定数の場合,虚部と右括弧が現在の記録に収まらなければ,コンマと虚部間で記録終了が起こることがあります。

個々の出力記録は,前の記録から継続された文字定数表現の場合を除いて,改行制御のための空白文字で始まります。

斜線,8 進値,ヌル値,および値の繰り返し書式は出力されません。

ファイルが書式なし I/O のために接続されている場合,変数群データ転送は禁止されます。

以下の文を考えます。

	CHARACTER*19 NAME(2)/2*' '/
	REAL PITCH, ROLL, YAW, POSITION(3)
	LOGICAL DIAGNOSTICS
	INTEGER ITERATIONS
	NAMELIST /PARAM/ NAME, PITCH, ROLL, YAW, POSITION, &
		DIAGNOSTICS, ITERATIONS
	...
	READ (UNIT=1,NML=PARAM)
	WRITE (UNIT=2,NML=PARAM)

次の入力が読み取られたとします。

	&PARAM
	    NAME(2)(10:)='HEISENBERG',
	    PITCH=5.0, YAW=0.0, ROLL=5.0,
	    DIAGNOSTICS=.TRUE.
	    ITERATIONS=10
	/

この場合には,外部装置 2 に接続されているファイルに以下の記録が書き込まれます。

	&PARAM
	NAME   = '                         ', '        HEISENBERG',
	PITCH  =    5.000000    ,
	ROLL   =    5.000000    ,
	YAW    =   0.0000000E+00,
	POSITION        = 3*0.0000000E+00,
	DIAGNOSTICS     = T,
	ITERATIONS      =                10
	/

出力ファイルが DELIM='APOSTROPHE' で開かれていなければ,文字値はアポストロフィで囲まれないということに注意してください。POSITION 値は変数群入力で定義されていないので,POSITION の現在値が書き込まれます。

以下の例は,複数個の変数を宣言しています。これらは,namelist に置かれ,初期化され,変数群 I/O として画面に出力されます。

	INTEGER(1) int1
	INTEGER    int2, int3, array(3)
	LOGICAL(1) log1
	LOGICAL log2, log3
	REAL    real1
	REAL(8) real2
	COMPLEX z1, z2
	CHARACTER(1)  char1
	CHARACTER(10) char2

	NAMELIST /example/ int1, int2, int3, log1, log2, log3, &
	&	real1, real2, z1, z2, char1, char2, array

	int1     = 11
	int2     = 12
	int3     = 14
	log1     = .TRUE.
	log2     = .TRUE.
	log3     = .TRUE.
	real1    = 24.0
	real2    = 28.0d0
	z1       = (38.0,0.0)
	z2       = (316.0d0,0.0d0)
	char1    = 'A'
	char2    = '0123456789'
	array(1) = 41
	array(2) = 42
	array(3) = 43
	WRITE (*, example)

この例は,以下の出力を生成します。

	&EXAMPLE
	INT1  =   11,
	INT2  =          12,
	INT3  =          14,
	LOG1  = T,
	LOG2  = T,
	LOG3  = T,
	REAL1 =   24.00000    ,
	REAL2 =   28.0000000000000     ,
	Z1    = (38.00000,0.0000000E+00),
	Z2    = (316.0000,0.0000000E+00),
	CHAR1 = A,
	CHAR2 = 0123456789,
	ARRAY =          41,          42,          43
	/

関連情報