名前リストの形式設定

名前リストの形式設定によって NAMELIST ステートメントの 一部として NAME= 指定子を使用して名前を変数の集合に割り当てることができます。 この名前は、入出力の変数の集合全体を表します。 また、名前リストの形式設定を使用して 入力と一緒に名前リスト・コメントを組み込むことができ、 ユーザーがデータをより利用しやすくなります。

名前リスト入力

名前リスト入力の形式は次のとおりです。

  1. オプションのブランク。
  2. アンパーサンド文字と、その直後に NAMELIST ステートメント内で指定された名前リスト・グループ名。
  3. 1 つ以上のブランク。
  4. 値のセパレーターで区切られた、 ゼロ個以上の一連の名前値サブシーケンス
  5. 名前リスト入力を終了するためのスラッシュ。

区切られた文字定数を継続する入力レコードの先頭のブランクは、 定数の一部と見なされます。

+----------------------------------IBM 拡張----------------------------------+

NAMELIST=OLD 実行時オプションを 指定する場合、NAMELIST ステートメントの入力形式は、以下のとおりです。

  1. オプションのブランク。
  2. アンパーサンドまたはドル記号と、 その直後に NAMELIST ステートメント内で指定した名前リスト・グループ名。
  3. 1 つ以上のブランク。
  4. 1 つのコンマで区切られた、ゼロ個以上の一連の名前値サブシーケンス。 コンマは、最後の名前値サブシーケンスの後に挿入できます。
  5. 名前リストを終了するための &END または $END

+------------------------------End of IBM 拡張-------------------------------+

各入力レコードの最初の文字は、ブランクになります。 この中には、区切り文字で区切られた文字定数を継続するレコードも含まれます。

+---------------------------------Fortran 95---------------------------------+

名前リスト・コメント

Fortran 95 以上では、名前リストにコメントを使用できます。

+----------------------------------IBM 拡張----------------------------------+

コメントは、ストリーム入力に指定してはなりません。

+------------------------------End of IBM 拡張-------------------------------+

NAMELIST=NEW 実行時オプションを指定する場合、次のようになります。

+----------------------------------IBM 拡張----------------------------------+

NAMELIST=OLD 実行時オプションを指定する場合、次のようになります。

+------------------------------End of IBM 拡張-------------------------------+

+------------------------------End of IBM 拡張-------------------------------+

名前値サブシーケンス

入力レコード内の名前値サブシーケンスの形式は次のとおりです。



>>-name-- = --constant_list------------------------------------><
 
 

name
変数です。

constant
次の形式をとります。



>>-+------+--literal_constant----------------------------------><
   '-r--*-'
 
 

r
literal_constant が発生する回数を指定する符号なしかつゼロ以外のスカラー整数リテラル定数です。 r に kind 型付きパラメーターを指定してはなりません。

literal_constant
組み込み型のスカラー・リテラル定数か、またはヌル値です。 定数に kind 型付きパラメーターを指定してはなりません。 定数は、対応するリスト項目と同じ kind 型付きパラメーターで評価されます。

literal_constant が文字型の場合、区切り文字としてアポストロフィまたは引用符を指定する必要があります。

literal_constant が論理型の場合、T または F を 指定することができます。

名前リスト入力に関する規則

name を修飾する添え字、ストライド、および サブストリングの範囲式は、kind 型付きパラメーターが指定されていない整数リテラル定数でなければなりません。

name配列でも派生型の オブジェクトでもない場合、constant_list には単一の定数を含んでいる必要があります。

入力ファイルに指定されている変数名を、NAMELIST ステートメントの variable_name_list に指定する必要があります。 変数は任意の順序で指定できます。

EQUIVALENCE ステートメントに指定した名前が ストレージを name と共用する場合、variable_name_list にある その名前を置き換えてはなりません。

オプションで name の前または後に 1 つ以上のブランクを入れられますが、 name に埋め込まれたブランクがあってはなりません。

各名前値サブシーケンスでは、名前はオプションの修飾子付きの名前リスト・グループ項目の名前でなければなりません。 オプションの修飾付きの名前は、以下であってはなりません。

オプションの修飾を指定する場合、その修飾にベクトル添え字を入れてはなりません。

name がベクトル添え字なしの配列または配列セクションの 場合は、name は、配列の全エレメントのリストに保管された順序で拡張されます。

name が構造体の場合、name は、 組み込み型の最終コンポーネントのリストに派生型定義と同じ順序で拡張されます。 派生型の最終コンポーネントは、ポインター

FORTRAN 2003 の開始 または割り当て可能な FORTRAN 2003 の終了 属性を持ってはなりません。

name が配列または構造体の場合、constant_list 内の 定数の数は、name の拡張で指定した項目数以下になります。 定数の数が項目数を下回る場合は、残りの項目は前の値を保持します。

以下を使用して、ヌル値を指定できます。

ヌル値は、対応する入力リスト項目の定義状況に影響を与えません。 名前リスト・グループ・オブジェクト・リスト項目が定義されると、 前の値を保持します。定義されない場合は、未定義状態のままになります。

ヌル値は複素定数の実数部または虚数部として使用してはなりません。 単一のヌル値で、複素定数全体を表すことができます。

値のセパレーターの後に続くレコードの終わりは、 ブランクが途中に入るか否かにかかわらず、ヌル値を指定しません。

+----------------------------------IBM 拡張----------------------------------+

LANGLVL=EXTENDED 実行時オプションを 設定すると、XL Fortran によって複数の入力値を単一の配列エレメントと結合して指定できます。 XL Fortran は、配列エレメントの順序で、その配列の連続エレメントに値を割り当てます。 配列エレメントで、サブオブジェクトの指定子を指定してはなりません。

次の例を考えてみてください。 これは、配列 A を以下のように宣言します 。

      INTEGER A(100)
      NAMELIST /FOO/ A
      READ (5, FOO)

装置 5 には、次の入力が入っています。

 &FOO
 A(3) = 2, 10, 15, 16
 /
READ ステートメントの実行時に、XL Fortran は以下の値を割り当てます。

複数の値を単一の配列エレメントと結合して指定する場合、論理定数を、その前に ピリオドを付けて指定する必要があります (例: .T)。

実行時に NAMELIST=OLD オプションを 使用した場合、OPEN ステートメントの BLANK= 指定子は、文字以外の定数間の組み込みブランクと末尾ブランクを XL Fortran がどのように解釈するかを決定します。

-qmixed コンパイラー・オプションを指定した場合、 名前リスト・グループ名およびリスト項目名で、大文字小文字が区別されます。

+------------------------------End of IBM 拡張-------------------------------+

値のセパレーターとして スラッシュが検出されると、前の値の割り当てが行われた後にその入力ステートメントが終了されます。 名前リスト・グループ・オブジェクトの追加の項目は、ヌル値を受け取ります。

名前リスト入力データの例

ファイル NMLEXP には、READ ステートメントの実行の前に、 次のデータが入っています。

文字位置:

         1         2         3
1...+....0....+....0....+....0

ファイルの内容:

 &NAME1
 I=5,
 SMITH%P_AGE=27
 /

NMLEXP には、4 つのデータ・レコードが入っています。 プログラムには、次のデータが入っています。

TYPE PERSON
  INTEGER P_AGE
  CHARACTER(20) P_NAME
END TYPE PERSON
TYPE(PERSON) SMITH
NAMELIST /NAME1/ I,J,K,SMITH
I=1
J=2
K=3
SMITH=PERSON(20,'John Smith')
OPEN(7,FILE='NMLEXP')
READ(7,NML=NAME1)
! Only the value of I and P_AGE in SMITH are
! altered (I = 5, SMITH%P_AGE = 40).
! J, K and P_NAME in SMITH remain the same.
END

注:
前の例では、データ項目は別個のデータ・レコードに指定されています。 次の例は、同一のデータ項目を持つファイルで、1 つのデータ・レコードになっています。

文字位置:

             1         2         3         4
1...+....0....+....0....+....0....+....0

ファイルの内容:

 &NAME1 I= 5, SMITH%P_AGE=40 /

+---------------------------------Fortran 95---------------------------------+

NAMELIST=NEW を指定したときの NAMELIST コメントの例。 コメントは、値のセパレーターのスペースの後に表示されます。

&TODAY I=12345         ! This is a comment. /
X(1)=12345, X(3:4)=2*1.5, I=6,
P="!ISN'T_BOB'S", Z=(123,0)/

+-----------------------------End of Fortran 95------------------------------+

+----------------------------------IBM 拡張----------------------------------+

NAMELIST=OLD を指定したときの NAMELIST コメントの例。 コメントは、値のセパレーターのスペースの後に表示されます。

&TODAY I=12345,        ! This is a comment.
X(1)=12345, X(3:4)=2*1.5, I=6,
P="!ISN'T_BOB'S", Z=(123,0) &END

+------------------------------End of IBM 拡張-------------------------------+

名前リスト出力

WRITE ステートメントは、 データ型に応じて、NAMELIST ステートメントの variable_name_list からのデータを出力します。 このデータは、区切り文字で区切られていない文字データを 除き、名前リスト入力を使用して読み取ることができます。

名前リスト出力には、単一の長い文字変数を指定してはなりません。

直前のレコードから区切り文字で区切られている文字定数を継続していない各出力レコードは、 紙送り制御を可能にするブランク文字から始まります。

出力データ・フィールドは、書き込まれたフィールドの幅の 表に示されているように、すべての有効数字を収容するのに十分な大きさになります。

完全な配列の値は桁の大きい順に出力されます。

配列エレメントの長さがデータを保持するのに十分でない場合は、4 つ以上のエレメントを持つ 配列を指定する必要があります。

+----------------------------------IBM 拡張----------------------------------+

variable_name_list を指定した WRITE ステートメントは、少なくとも以下の 3 つの出力レコードを作成します。

名前リスト・データを内部ファイルに 出力するには、ファイルは、少なくとも 3 つのエレメントが入っている文字配列でなければなりません。 WRITE ステートメントを使用してデータを 内部ファイルに転送する場合、文字配列には 4 つ以上のエレメントが必要となる可能性があります。

+------------------------------End of IBM 拡張-------------------------------+

文字データは、OPEN ステートメントで DELIM= 指定子を使用して区切ることができます。

名前リスト文字出力

文字定数の出力は、OPEN ステートメントの DELIM= 指定子に応じて変わります。

DELIM= 指定子なしか、DELIM=NONE を 指定してオープンされたファイルの文字定数の場合は、次のようになります。

書き込まれた、区切りのない文字データは、文字データとして読み取ることはできません。

二重引用符は、DELIM=QUOTE に 各定数の前後に値のセパレーターを指定してオープンされたファイルの文字定数の区切り文字になります。 各内部引用符は、2 つの連続する引用符として出力されます。

アポストロフィは、DELIM=APOSTROPHE に各定数の前後に値のセパレーターを指定してオープンされたファイルの 文字定数の区切り文字になります。 各内部アポストロフィは、2 つの連続するアポストロフィとして出力されます。

+----------------------------------IBM 拡張----------------------------------+

内部ファイルの場合、 文字定数は、DELIM 指定子に値 APOSTROPHE を指定して出力されます。

+------------------------------End of IBM 拡張-------------------------------+

名前リスト出力に関する規則

文字変数がすべてのデータを保持できる長さであっても、 名前リスト・データを内部ファイルに出力するために単一の文字変数を指定してはなりません。

NAMELIST 実行時オプションを指定しなかった場合、または NAMELIST=NEW を指定した場合、 名前リスト・グループ名と名前リスト項目名は大文字で出力されます。

+----------------------------------IBM 拡張----------------------------------+

実行時に NAMELIST=OLD を指定した場合、次のようになります。

実行時に NAMELIST=OLD を指定した場合、 および OPEN ステートメントに DELIM= 指定子を使用しない場合には、 次のようになります。

-qmixed コンパイラー・オプションを 使用する場合、NAMELIST 実行時オプションの値にかかわらず、 名前リスト・グループ名では大文字小文字が区別されます。

出力レコードを指定の幅に制限するには、OPEN ステートメントで RECL= 指定子を使用するか、または NLWIDTH 実行時オプションを使用します。

デフォルトで、外部ファイルのすべての出力項目が、1 つの出力レコードに示されます。 レコードを別々の行に出力するには、OPEN ステートメントで RECL= 指定子を使用するか、または NLWIDTH 実行時オプションを使用します。

+------------------------------End of IBM 拡張-------------------------------+

名前リスト出力データの例

TYPE PERSON
  INTEGER P_AGE
  CHARACTER(20) P_NAME
END TYPE PERSON
TYPE(PERSON) SMITH
NAMELIST /NL1/ I,J,C,SMITH
CHARACTER(5) :: C='BACON'
INTEGER I,J
I=12046
J=12047
SMITH=PERSON(20,'John Smith')
WRITE(6,NL1)
END

NAMELIST=NEWWRITE ステートメントの実行後 の出力データ:

    1         2         3         4
1...+....0....+....0....+....0....+....0
 &NL1
 I=12046, J=12047, C=BACON, SMITH=20, John Smith
 /

+----------------------------------IBM 拡張----------------------------------+

NAMELIST=OLDWRITE ステートメントの実行後 の出力データ:

    1         2         3         4
1...+....0....+....0....+....0....+....0
 &nl1
 i=12046, j=12047, c='BACON', smith=20, 'John Smith          '
 &end

+------------------------------End of IBM 拡張-------------------------------+

IBM Copyright 2003