ファイルI/O
本章では、OpenFrame PL/Iのファイル入出力について説明します。
1. 概要
OpenFrame PL/Iは、次の2つの方式のファイルI/O処理をサポートします。それぞれの方式は異なる方法でデータを処理します。
-
Record I/O
-
データを変換せずに、ストレージ上に存在するとおりの形で入出力します。
-
READ、WRITE、DELETE、REWRITE、LOCATEステートメントを使用し、1つのステートメントあたり1つのデータを処理します。
-
-
Stream I/O
-
データを文字形式に変換して、ストリーム形式で入出力します。
-
GET、PUTステートメントを使用し、1つのステートメントあたり1つ以上のデータを処理します。
-
ファイル
ファイル入出力を使用するには、FILE属性を持つファイル変数を宣言する必要があります。ファイルは外部データセットと接続され、外部データセットの属性を指定することができます。
ファイルに関連する属性は、DECLAREステートメントやOPENステートメントに使用することができます。ただし、ENVIRONMENT属性は、DECLAREステートメントにのみ使用することができます。
ファイルに関連する属性は以下のとおりです。
属性 | 説明 |
---|---|
RECORD、STREAM |
ファイル入出力方式を指定します。
|
INPUT, OUTPUT, UPDATE |
データセットのオープン・モードを指定します。
Stream I/Oは、UPDATE属性を使用できません。 |
SEQUENTIAL、 DIRECT |
データセットのアクセス・モードを指定します。
Stream I/Oは、SEQUENTIAL属性のみ使用することができます。 |
BUFFERED、 UNBUFFERED |
レコードを処理する際の入出力バッファーの使用可否を指定します。
SEQUENTIALファイルのデフォルト値はBUFFEREDで、DIRECTファイルのデフォルト値はUNBUFFEREDです。 Stream I/Oは、UNBUFFERED属性を使用できません。 |
ENVIRONMENT |
ENVIRONMNET属性を使ってデータセットの複数の属性を定義することができます。 以下の属性を定義することができます。
|
KEYED |
RECORDファイルにのみ使用することができます。IndexedデータセットとRelativeデータセットでのみ使用することができます。 属性を定義する場合、入出力ステートメントのKEY、KEYTO、KEYFROMオプションを使用することができます。 |
ファイルをプリンター出力用に指定します。STREAM OUTPUTファイルにのみ使用することができます。 属性を指定する場合、OPENステートメントでLINESIZE、PAGESIZEオプションを指定でき、PUTステートメントでPAGE、LINEオプションを指定できます。また、データを出力する際にそれぞれのデータをタブで区分し、文字データは引用符が付きません。 |
SYSPRINTとSYSIN
SYSPRINTとSYSINは、PL/Iプログラムで提供するファイルです。これらのファイルは、PL/Iプログラム内部で作成され、明示的に宣言したりオープンしたりする必要はありません。
SYSPRINTは標準出力用のファイルであり、SYSINは標準入力用のファイルです。SYSINはSTREAM、INPUT属性をデフォルトで持ち、SYSPRINTはSTREAM、OUTPUT、PRINT属性をデフォルトで持ちます。
2. ステートメント
本節では、ファイルに関連するステートメントについて説明します。
2.1. OPENステートメント
OPENステートメントは、指定したファイルを開きます。

open-options :
項目 | 説明 |
---|---|
FILE |
対象ファイルを指定します。 |
FILE属性 |
詳細については、「ファイル」を参照してください。 |
TITLE |
JCLに記述されている外部データセットのDD名を指定します。 |
LINESIZE |
1行の長さを定義します。 ストリームがLINESIZEに指定した値を超えた場合、次の行の最初の列に移動します。 LINESIZEオプションは、STREAM OUTPUTファイルにのみ使用できます。(デフォルト値: 120) |
PAGESIZE |
1ページあたりの行数を定義します。 行のサイズがPAGESIZEに指定した値を超えた場合、ENDFILE条件が起こります。 PUTステートメントでPAGEフォーマット項目やPAGEオプションを使って、新しいページを開始することができます。(デフォルト値: 60) |
ファイルを開くためには、OPENステートメントを指定するか、ファイルが開いていない状態でREAD、WRITE、REWRITE、DELETE、LOCATE、PUT、GETステートメントを使用すると、ファイルが開きます。OPENステートメントを使ってファイルを明示的に開く場合に、FILE属性を定義して宣言すると、FILE属性を再定義することができます。
以下は、OPENステートメントを使用してFILE属性を再定義する例です。
DECLARE TEST FILE RECORD OUTPUT; OPEN FILE(TEST) STREAM INPUT; CLOSE FILE(TEST); OPEN FILE(TEST);
最初のOPENステートメントで、TESTはSTREAM、INPUT属性を持ちます。ファイルを閉じると、再度開く際に適用したFILE属性は消去されます。したがって、2つ目のOPENステートメントでは、DECLAREステートメントで指定したRECORD、OUTPUT属性を持ちます。
宣言時に定義したFILE属性と、開く際に定義したFILE属性が衝突した場合、エラーが発生します。 |
3. Record I/O
Record I/Oは、データを変換せずに、ストレージ上に存在するとおりの形で処理する方式です。
Record I/Oは、連続(Consecutive)、索引付き(Indexed)、相対(Relative)データセットを使用することができ、レコードを順次に入出力したり、キーを使って任意に入出力することができます。また、1つのレコードを変数に保存したり書いたりすることができ、ポインターでアクセスすることができます。
3.1. READステートメント
READステートメントは、データセットからレコードを読み取ります。読み取ったレコードを、指定した変数に保存したり、ポインターで指定することができます。

項目 | 説明 |
---|---|
FILE |
読み取るファイルを指定します。対象ファイルはINPUT属性またはUPDATE属性を持つ必要があります。 |
IGNORE |
式の値の分のレコードを無視します。 計算された式の値がnの場合、IGNOREオプションを実行した後にはn+1番目のレコードを読み取ります。 |
INTO |
読み取ったレコードを指定した変数に保存します。 変数が配列または構造体の場合、必ずストレージで隣接している必要があります。 |
SET |
読み取ったレコードを指定したポインターでセットします。 |
KEY |
指定したキーに対応するレコードを読み取ります。 KEYオプションを使用するためには、ファイルはDIRECT属性またはSEQUENTIAL KEYED属性を持つ必要があります。 |
KEYTO |
レコードを読み取る際にそのレコードのキー値も一緒に読み取ります。 KEYTOオプションを使用するためには、ファイルはSEQUENTIAL KEYED属性を持つ必要があります。 |
3.2. WRITEステートメント
WRITEステートメントは、データセットにレコードを書き込みます。

項目 | 説明 |
---|---|
FILE |
記録するファイルを指定します。対象ファイルはOUTPUT属性またはUPDATE属性を持つ必要があります。 |
FROM |
レコードを記録する変数を指定します。変数が配列あるいは構造体の場合、ストレージで隣接している必要があります。 |
KEYFROM |
記録するレコードのキーを指定します。 KEYFROMオプションを使用するためには、ファイルはKEYED属性を持つ必要があります。 KEYFROMの値は、索引付きデータセットでは文字に変換され、相対データセットでは固定10進数に変換されます。 |
KEYTO |
レコードを記録する際に次に記録されるキーの値を保存します。 KEYTOオプションを使用するためには、ファイルはSEQUENTIAL KEYED属性を持つ必要があります。 |
3.3. DELETEステートメント
DELETEステートメントは、データセットからレコードを削除します。

項目 | 説明 |
---|---|
FILE |
削除するファイルを指定します。対象ファイルはUPDATE属性を持つ必要があります。 |
KEY |
指定したキーに対応するレコードを削除します。 KEYオプションを使用するためには、ファイルはDIRECT属性あるいはSEQUENTIAL KEYED属性を持つ必要があります。 |
3.4. REWRITEステートメント
REWRITEステートメントは、データセットのレコードを更新します。

項目 | 説明 |
---|---|
FILE |
更新するファイルを指定します。対象ファイルはUPDATE属性を持つ必要があります。 |
FROM |
レコードを記録する変数を指定します。変数が配列あるいは構造体の場合、ストレージで隣接している必要があります。 |
KEY |
指定したキーに対応するレコードを削除します。 KEYオプションを使用するためには、ファイルはDIRECT属性あるいはSEQUENTIAL KEYED属性を持つ必要があります。 |
3.5. LOCATEステートメント
LOCATEステートメントは、次に記録する出力バッファーに基底付き変数を介してアクセスできるように、その位置をポインターで指定します。

項目 | 説明 |
---|---|
FILE |
ターゲット・ファイルを指定します。ターゲット・ファイルはOUTPUT SEQUENTIAL BUFFERED属性を持つ必要があります |
based variable |
出力バッファーにアクセスできる基底付き変数を定義します。 |
SET |
出力バッファーのアドレスを保存するポインターを指定します。 |
KEYFROM |
記録するレコードのキーを指定します。 KEYFROMオプションを使用するためには、ファイルはKEYED属性を持つ必要があります。 KEYFROMの値は、索引付きデータセットでは文字に変換され、相対データセットでは固定10進数に変換されます。 |
レコードは、LOCATEステートメントを実行した時点では記録されず、FLUSHステートメントを使用してバッファーを空にした際か、次のLOCATEステートメントを実行した際に記録されます。したがって、LOCATEステートメントを実行しても、データセットに記録されるレコードは基底付き変数を介して継続して変更されることがあります。 |
4. Stream I/O
Stream I/Oは、データを文字列形式に変換し、複数のデータをストリーム形式に作成して処理する方式です。
ストリームは、文字列に変換されたデータが連続して保存された空間です。ストリームは、データセットのレコードの長さの分をデータセットから読み取ったり、書き込みます。ストリームが複数のレコードに分けられる場合も、内部的に1つのストリームに作成して処理します。
Stream I/Oは連続データセットでのみ使用可能で、順次入出力のみ可能です。Stream I/Oでは、GET、PUTステートメントを使用して3つの方式でストリームを作成したり、ストリームから読み取ることができます。
本節では、GET、PUTステートメントと3つの方式について説明します。
4.1. GETステートメント
GETステートメントは、ストリームからレコードを読み取ります。ストリームは、データセットのレコードまたは文字列から取得することができます。
データセットからデータを読み取る場合のGETステートメントの文法は以下のとおりです。

項目 | 説明 |
---|---|
FILE |
対象ファイルを指定します。ファイルを省略する場合、SYSINファイルが指定されます。 |
data-specification |
データ指定を参照してください。 |
COPY |
読み込んだストリームを指定したフィアルにそのまま保存します。ファイルを省略する場合、SYSPRINTファイルが指定されます。 |
SKIP (expression) |
式の値の分のデータをスキップして次のデータを取得します。 式が省略された場合、デフォルト値は1です。 |
文字列からデータを読み取る場合のGETステートメントの文法は以下のとおりです。

項目 | 説明 |
---|---|
STRING |
対象文字列を指定します。 |
data-specification |
データ指定を参照してください。 |
4.2. PUTステートメント
PUTステートメントは、レコードをストリームに作成します。ストリームは、データセットのレコード、または文字列に保存されます。
データセットにデータを保存する場合のPUTステートメントの文法は以下のとおりです。

項目 | 説明 |
---|---|
FILE |
対象ファイルを指定します。ファイルを省略する場合、SYSPRINTファイルが指定されます。 |
data-specification |
データ指定を参照してください。 |
SKIP (expression) |
式の値の分の行をスキップします。式が省略された場合、デフォルト値は1です。 |
LINE (expression) |
式の値に対応する行に移動します。 LINEオプションを使用するためには、ファイルにPRINT属性が定義されている必要があります。 |
PAGE |
新しいページを開始します。行は1に初期化されます。 PAGEオプションを使用するためには、ファイルにPRINT属性が定義されている必要があります。 |
文字列にデータを保存する場合のPUTステートメントの文法は以下のとおりです。

項目 | 説明 |
---|---|
STRING |
対象文字列を指定します |
data-specification |
データ指定を参照してください。 |
4.3. データ指定
GET、PUTステートメントのデータ指定に関する文法は以下のとおりです。

data list :
format list :
項目 | 説明 |
---|---|
LIST |
詳細については、リスト・ディレクティブ入出力を参照してください。 |
DATA |
詳細については、データ・ディレクティブ入出力を参照してください 。 |
EDIT |
詳細については、編集ディレクティブ入出力を参照してください 。 |
data-list item |
|
data-list DO Type 3 |
DOステートメントのタイプ3の文法を参照してください。 DOステートメントのタイプ3は括弧で括られて複数回ネストされることができます。下の例を参照してください。 |
format list |
フォーマット項目の詳細については、フォーマット項目を参照してください。 |
Type 3 DOが指定されたデータ・リスト項目の例は以下のとおりです。
PUT LIST(((A(I,J), B(I,J) DO I = 1 TO 3) DO J = 3 TO 4));
「DO J = 3 TO 4」が最も外側の反復指定であり、「DO I = 1 TO 3」が内側の反復指定、最も内側の「A(I,J)、B(I,J)」がDOグループになります。したがって、上の例は下の例と同一です。
DO J = 3 TO 4; DO I = 1 TO 3; PUT LIST(A(I,J), B(I,J)); END; END;
4.3.1. リスト・ディレクティブ入出力
リスト・ディレクティブ入出力(List-directed I/O)は、データを順次に処理します。データはタイプによって変換規則に従って変換され、各データは空白で区切られて入出力されます。
-
リスト・ディレクティブ入力
-
データが文字の場合、データを囲んでいる引用符を取り除いて保存します。
-
データが算術定数の場合、基数、スケール、モード、精度は、実際に保存されるデータ・リスト項目の属性に従います。
-
以下は、リスト・ディレクティブ入力の使用例です。
GET LIST(A,B,C,D);
Stream I/Oの大きな特徴は、1つのステートメントで複数のデータを処理できるということです。
上の例は、以下の例と同一です。
GET LIST(A); GET LIST(B); GET LIST(C); GET LIST(D);
ストリームにデータが以下のように存在する場合、A、B、C、Dに、100、90、80、70がそれぞれ保存されます。
100 90 80 70
ストリームのデータと保存される変数のタイプが異なる場合に変換が発生します。変換に失敗した場合は、CONVERSION条件が起こります。
-
-
リスト・ディレクティブ出力
-
データ・リスト項目は文字列に変換され、ストリームに作成されます。
-
項目が算術定数の場合、変換規則に従って文字列に変換されて作成されます。
-
項目がビットの場合、データの最初と最後に引用符を付け、最後に文字Bを追加して作成します。
-
項目が文字の場合、ファイルにPRINT属性があるかどうかによって処理に違いがあります。
-
ファイルにPRINT属性がない場合、データの最初と最後に引用符を付けて作成します。
-
ファイルにPRINT属性がある場合、引用符を付けません。
-
-
以下は、リスト・ディレクティブ出力の使用例です。
DCL A FIXED DEC INIT(15); DCL B CHAR(4) INIT('TEST'); DCL C BIT(8) INIT('11110000'); PUT LIST(A,B,C);
上の例で作成されたストリームは以下のとおりです。
15 TEST '11110000'B
PUTステートメントでFILEオプションを指定していない場合は、デフォルトでSYSPRINTが指定されますが、SYSPRINTはPRINT属性を持つため、文字列に引用符が付いていないことを確認できます。
リスト・ディレクティブ出力では、参照だけでなく式も可能です。
-
以下は、複数の式の例とその結果です。
PUT LIST('AB' || 'CD', 5 * 15, 1.5E+2);
ABCD 75 1.5E+0002
-
4.3.2. データ・ディレクティブ入出力
データ・ディレクティブ入出力(Data-directed I/O)のストリーム・データは、データ・リスト項目の名前と値で構成されます。項目の名前と値は、文字「=」で区分されます。
データ・ディレクティブ入出力によって作成されるストリーム・データの文法は以下のとおりです。
-
データ・ディレクティブ入力
-
リスト・ディレクティブ入力とは異なり、データは順次項目に保存されずに、データの名前と項目の名前が一致する場合にのみ保存されます。また、GETステートメントの項目分のデータを読み取って処理するリスト・ディレクティブ入力とは異なり、データ・ディレクティブ入力はセミコロン(;)単位でストリームを読み取って処理します。
-
以下は、データ・ディレクティブ入力の例です。
GET DATA(A,B,C,E);
ストリームにデータが以下のように存在する場合、A、B、Cに、10、20、30がそれぞれ保存されます。
B= 20 A= 10 C= 30 D= 40;
データの名前が項目の名前と一致する場合は、データから名前と文字「=」を取り除いた値のみ保存されます。ストリームのセミコロンの前までのデータの順序は重要ではありません。
Eはデータ・リストには存在しますが、ストリームには存在しないため、Eの値は変化しません。ストリームには存在しますがデータ・リストに存在しないDは無視されます。データ・リストに配列や構造体が存在する場合、サポートされません。
-
-
データ・ディレクティブ出力
-
データ・リストの名前と値は文字列に変換され、ストリームに保存されます。
-
データ・リストに配列や構造体が存在する場合、データ名にサブスクリプトまたは修飾名が含まれます。
-
以下は、配列と構造体に対するデータ・ディレクティブ出力の例です。
DCL A(3) CHAR(2) INIT('12','34','56'); DCL 1 B, 2 C FIXED DEC INIT(3), 2 D, 3 E FIXED DEC INIT(5); PUT DATA(A, B);
上の例で作成されたストリームは以下のとおりです。
A(1)='12' A(2)='34' A(3)='56' B.C= 3 B.D.E= 5;
1回のPUTステートメントが終了すると、該当ストリームのセミコロンが入ります。セミコロンは、データ・ディレクティブ入力で1回のGETステートメントを実行した際にストリームを読み取る基準になります。
-
4.3.3. 編集ディレクティブ入出力
編集ディレクティブ入出力(Edit-directed I/O)は、フォーマットを指定してデータを処理します。データ・リスト項目は指定したフォーマットに合わせて変換されます。制御フォーマットは、データ・リスト項目とマッチングされず、データ間の空白や改行のような役割をします。フォーマットについての詳細は、フォーマット項目を参照してください。
編集ディレクティブ入出力でデータ・リスト項目とフォーマット項目の数は一致しないことがあります。以下の例を参照してください。
PUT EDIT(A,B,C)(A(4),F(15,6));
データ・リスト項目の数は、A、B、Cの3個ですが、フォーマット項目の数はA(4)、F(15)の2個です。フォーマットの最後に到達すると、再度フォーマットの最初に戻ります。したがって、CはA(4)のフォーマットで出力されます。
PUT EDIT(A,B)(A(4),F(15,6),B(8));
上の例のように、フォーマット項目の数が多い場合は、残りのフォーマット項目は無視されます。したがって、B(8)フォーマットは使用されません。
フォーマット項目は、反復因数を使用して、そのフォーマット項目を指定した回数繰り返すことができます。
-
編集ディレクティブ入力
-
編集ディレクティブ入力は、リスト・ディレクティブ入力、データ・ディレクティブ入力とは異なり、空白でデータを区分しません。ストリームに存在するすべての文字はデータに含まれ、ユーザーが直接フォーマット項目を用いてデータを区分する必要があります。
-
以下は、編集ディレクティブ入力の例です。
GET EDIT(A,B,C)(A(4),A,X(4),F(6,2));
上の例は、以下のように処理されます。
-
ストリームで4文字をAに保存します。
-
Bの長さをストリームから読み取って、Bに保存します。
-
次の4文字は無視します。
-
次の6文字は固定小数点フォーマットでCに保存します。
-
-
-
編集ディレクティブ出力
-
編集ディレクティブ出力は、リスト・ディレクティブ入力、データ・ディレクティブ入力とは異なり、データ間に空白を挿入しません。指定したフォーマット項目どおり、該当データをストリームに保存します。
-
以下は、編集ディレクティブ出力の例です。
PUT EDIT(A,B,'edit direct')(SKIP(1),A(2),X(4),F(15,4),COL(30),A(11));
上の例は、以下のように処理されます。
-
1行がスキップされます。
-
Aを2文字に変換してストリームに保存します。Aが2より長い場合、残りの部分は切り捨てられます。
-
空白を4文字分ストリームに保存します。
-
Bを15桁、精度4の固定小数点型に変換してストリームに保存します。
-
'edit direct’文字列は、列位置30に長さ11の分がストリームに保存されます。
-
-
4.4. FORMATステートメント
FORMATステートメントの詳細については、FORMATステートメントを参照してください。
4.5. フォーマット項目
フォーマット項目は、以下の3つのタイプに分けられます。
-
制御フォーマット項目
-
データセットのレイアウトに関連するフォーマット項目
-
COLUMN、LINE、PAGE、SKIP、Xフォーマット項目
-
-
データ・フォーマット項目
-
データ・リスト項目を入出力するためのフォーマット項目
-
A、B、E、F、Pフォーマット項目
-
-
リモート・フォーマット項目
-
フォーマット・リストを指定するためのフォーマット項目
-
Rフォーマット項目
-
4.5.1. Aフォーマット
Aフォーマットは、文字を出力するためのデータ・フォーマットです。
-
入力では、長さを指定した場合、指定した長さのデータをストリームから読み取ります。長さを指定していない場合は、データ・リスト項目の長さのデータをストリームから読み取ります。
-
出力では、長さを指定した場合、指定した長さのデータをストリームに保存します。Aフォーマットに指定した長さがデータ・リスト項目の長さより短いか長い場合には、切り捨てるか、パディングします。長さを指定していない場合は、データ・リスト項目の長さのデータをストリームに保存します。

項目 | 説明 |
---|---|
field-width |
文字の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値が省略された場合、デフォルト値はデータの長さになります。 |
4.5.2. Bフォーマット
Bフォーマットは、ビットを出力するためのデータ・フォーマットです。
-
Bフォーマットの入力は、まだサポートされていません。
-
出力では、データをビットに変換してストリームに保存します。変換規則については、データ変換を参照してください。

項目 | 説明 |
---|---|
field-width |
ビットの長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値が省略された場合、デフォルト値はデータの長さになります。 |
4.5.3. COLUMNフォーマット
COLUMNフォーマットは、指定した行の桁に位置を移動させる制御フォーマットです。
-
入力では、指定した位置に移動し、その間の値は無視されます。
-
出力では、指定した位置に移動し、その間には空白が挿入されます。

項目 | 説明 |
---|---|
character-position |
位置を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。 |
4.5.4. Eフォーマット
Eフォーマットは、浮動小数点を出力するためのデータ・フォーマットです。
-
Eフォーマットの入力は、まだサポートされていません。
-
出力では、データを浮動小数点に変換し、ストリームに保存します。Eフォーマットに指定した長さがデータの長さより短いか長い場合には、切り捨てるか、パディングします。長さを指定していない場合は、データ・リスト項目の長さのデータをストリームに保存します。

項目 | 説明 |
---|---|
field-width |
浮動小数点の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません |
4.5.5. Fフォーマット
Fフォーマットは、固定小数点を出力するためのデータ・フォーマットです。
-
Fフォーマットの入力は、まだサポートされていません。
-
出力では、データを固定小数点に変換し、ストリームに保存します。

項目 | 説明 |
---|---|
field-width |
固定小数点の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。 |
fractional-digits |
固定小数点の右側にある小数部の桁数を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値をfield-widthの値より大きくすることはできません。この値が省略された場合、デフォルト値は0です。 |
scaling-factor |
固定小数点の位取り係数を指定します。指定した値の回数分10を乗算します。負数を指定した場合は、指定した値の回数分10を除算します。 |
4.5.6. LINEフォーマット
LINEフォーマットは、指定した行に位置を移動させる制御フォーマットです。
-
LINEフォーマットの入力は使用できません。
-
出力では、指定した行に位置を移動し、その間には空白行が挿入されます。

項目 | 説明 |
---|---|
line-number |
移動する行を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。 |
4.5.7. Pフォーマット
Pフォーマットは、ピクチャー文字を出力するためのデータ・フォーマットです。
-
Pフォーマットの入力は、まだサポートされていません。
-
出力では、データを指定したピクチャー・フォーマットに変換してストリームに保存します。

項目 | 説明 |
---|---|
picture-specification |
ピクチャー文字の規則を指定します。詳細については、ピクチャー指定を参照してください。 |
4.5.8. PAGEフォーマット
PAGEフォーマットは、新しいページを開始するための制御フォーマットです。
-
PAGEフォーマットの入力は使用できません。
-
出力では、新しいページが開始され、行は1に初期化されます。

4.5.9. Rフォーマット
Rフォーマットは、FORMATステートメントのフォーマット・リストを指定するためのリモート・フォーマットです。

項目 | 説明 |
---|---|
label-reference |
FORMATステートメントのラベルを指定します。 |
ラベル参照をラベル変数として宣言することはまだサポートされていません。
以下は、編集ディレクティブ出力で、Rフォーマットを使ってFORMATステートメントのフォーマット・リストを使用する例です。
lbl1:FORMAT(A(4), X(2)); PUT EDIT(A,B,C,D)(A(2),F(15),R(lbl1),A);
上の例のPUTステートメントは、下の例と同一です。
PUT EDIT(A,B,C,D)(A(2),F(15),A(4),X(2),A);