ファイル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

ファイル入出力方式を指定します。

  • RECORD : 入出力ステートメントとして、READ、WRITE、REWRITE、LOCATE、DELETEステートメントを使用することができます。

  • STREAM : PUT、GETステートメントを使用することができます。(デフォルト値)

INPUT,

OUTPUT,

UPDATE

データセットのオープン・モードを指定します。

  • INPUT : データセットでレコードを読み取ることができます。(デフォルト値)

  • OUTPUT : データセットにレコードを書き込むことができます。

  • UPDATE : レコードの読み取りや変更が可能です。

Stream I/Oは、UPDATE属性を使用できません。

SEQUENTIAL、

DIRECT

データセットのアクセス・モードを指定します。

  • SEQUENTIAL : データセットに順次に読み書きします(デフォルト値)

  • DIRECT : 指定する順序でレコードを処理します。SEQUENTIAL KEYED属性を指定した場合、順次にアクセスするか、指定の順にレコードを処理することができます。

Stream I/Oは、SEQUENTIAL属性のみ使用することができます。

BUFFERED、

UNBUFFERED

レコードを処理する際の入出力バッファーの使用可否を指定します。

  • BUFFERED : READステートメントのSETオプションとLOCATEステートメントを使用することができます。

  • UNBUFFERED : レコードは入出力バッファーに保存されずにすぐに処理されます。

SEQUENTIALファイルのデフォルト値はBUFFEREDで、DIRECTファイルのデフォルト値はUNBUFFEREDです。

Stream I/Oは、UNBUFFERED属性を使用できません。

ENVIRONMENT

ENVIRONMNET属性を使ってデータセットの複数の属性を定義することができます。

以下の属性を定義することができます。

  • F、FB、FBS、V、VB、VBS、U

  • RECSIZE、BLKSIZE、KEYLOC、KEYLENGTH

  • CONSECUTIVE、INDEXED、ORGANIZATION(CONSECUTIVE)、ORGANIZATION(INDEXED)、ORGANIZATION(RELATIVE)、VSAM

KEYED

RECORDファイルにのみ使用することができます。IndexedデータセットとRelativeデータセットでのみ使用することができます。

属性を定義する場合、入出力ステートメントのKEY、KEYTO、KEYFROMオプションを使用することができます。

PRINT

ファイルをプリンター出力用に指定します。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ステートメントは、指定したファイルを開きます。

figure syntax open

open-options :

image

項目 説明

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属性が衝突した場合、エラーが発生します。

2.2. CLOSEステートメント

CLOSEステートメントは、指定したファイルを閉じます。

figure syntax close
項目 説明

FILE

対象ファイルを指定します。アスタリスク(*)を使用して、開いているファイルをすべて閉じることができます。

2.3. FLUSHステートメント

FLUSHステートメントは、指定したファイルのバッファーをフラッシュします。FLUSHステートメントを使用するには、ファイルにBUFFERED属性が定義されている必要があります。

figure syntax flush
項目 説明

FILE

対象ファイルを指定します。アスタリスク(*)を使用して、開いているファイルをすべてフラッシュすることができます。

3. Record I/O

Record I/Oは、データを変換せずに、ストレージ上に存在するとおりの形で処理する方式です。

Record I/Oは、連続(Consecutive)、索引付き(Indexed)、相対(Relative)データセットを使用することができ、レコードを順次に入出力したり、キーを使って任意に入出力することができます。また、1つのレコードを変数に保存したり書いたりすることができ、ポインターでアクセスすることができます。

3.1. READステートメント

READステートメントは、データセットからレコードを読み取ります。読み取ったレコードを、指定した変数に保存したり、ポインターで指定することができます。

figure syntax read
項目 説明

FILE

読み取るファイルを指定します。対象ファイルはINPUT属性またはUPDATE属性を持つ必要があります。

IGNORE

式の値の分のレコードを無視します。

計算された式の値がnの場合、IGNOREオプションを実行した後にはn+1番目のレコードを読み取ります。

INTO

読み取ったレコードを指定した変数に保存します。

変数が配列または構造体の場合、必ずストレージで隣接している必要があります。

SET

読み取ったレコードを指定したポインターでセットします。

KEY

指定したキーに対応するレコードを読み取ります。

KEYオプションを使用するためには、ファイルはDIRECT属性またはSEQUENTIAL KEYED属性を持つ必要があります。

KEYTO

レコードを読み取る際にそのレコードのキー値も一緒に読み取ります。

KEYTOオプションを使用するためには、ファイルはSEQUENTIAL KEYED属性を持つ必要があります。

3.2. WRITEステートメント

WRITEステートメントは、データセットにレコードを書き込みます。

figure syntax write
項目 説明

FILE

記録するファイルを指定します。対象ファイルはOUTPUT属性またはUPDATE属性を持つ必要があります。

FROM

レコードを記録する変数を指定します。変数が配列あるいは構造体の場合、ストレージで隣接している必要があります。

KEYFROM

記録するレコードのキーを指定します。

KEYFROMオプションを使用するためには、ファイルはKEYED属性を持つ必要があります。

KEYFROMの値は、索引付きデータセットでは文字に変換され、相対データセットでは固定10進数に変換されます。

KEYTO

レコードを記録する際に次に記録されるキーの値を保存します。

KEYTOオプションを使用するためには、ファイルはSEQUENTIAL KEYED属性を持つ必要があります。

3.3. DELETEステートメント

DELETEステートメントは、データセットからレコードを削除します。

figure syntax delete
項目 説明

FILE

削除するファイルを指定します。対象ファイルはUPDATE属性を持つ必要があります。

KEY

指定したキーに対応するレコードを削除します。

KEYオプションを使用するためには、ファイルはDIRECT属性あるいはSEQUENTIAL KEYED属性を持つ必要があります。

3.4. REWRITEステートメント

REWRITEステートメントは、データセットのレコードを更新します。

figure syntax rewrite
項目 説明

FILE

更新するファイルを指定します。対象ファイルはUPDATE属性を持つ必要があります。

FROM

レコードを記録する変数を指定します。変数が配列あるいは構造体の場合、ストレージで隣接している必要があります。

KEY

指定したキーに対応するレコードを削除します。

KEYオプションを使用するためには、ファイルはDIRECT属性あるいはSEQUENTIAL KEYED属性を持つ必要があります。

3.5. LOCATEステートメント

LOCATEステートメントは、次に記録する出力バッファーに基底付き変数を介してアクセスできるように、その位置をポインターで指定します。

figure syntax 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ステートメントの文法は以下のとおりです。

figure syntax get file
項目 説明

FILE

対象ファイルを指定します。ファイルを省略する場合、SYSINファイルが指定されます。

data-specification

データ指定を参照してください。

COPY

読み込んだストリームを指定したフィアルにそのまま保存します。ファイルを省略する場合、SYSPRINTファイルが指定されます。

SKIP (expression)

式の値の分のデータをスキップして次のデータを取得します。

式が省略された場合、デフォルト値は1です。

文字列からデータを読み取る場合のGETステートメントの文法は以下のとおりです。

figure syntax get string
項目 説明

STRING

対象文字列を指定します。

data-specification

データ指定を参照してください。

4.2. PUTステートメント

PUTステートメントは、レコードをストリームに作成します。ストリームは、データセットのレコード、または文字列に保存されます。

データセットにデータを保存する場合のPUTステートメントの文法は以下のとおりです。

figure syntax put file
項目 説明

FILE

対象ファイルを指定します。ファイルを省略する場合、SYSPRINTファイルが指定されます。

data-specification

データ指定を参照してください。

SKIP (expression)

式の値の分の行をスキップします。式が省略された場合、デフォルト値は1です。

LINE (expression)

式の値に対応する行に移動します。

LINEオプションを使用するためには、ファイルにPRINT属性が定義されている必要があります。

PAGE

新しいページを開始します。行は1に初期化されます。

PAGEオプションを使用するためには、ファイルにPRINT属性が定義されている必要があります。

文字列にデータを保存する場合のPUTステートメントの文法は以下のとおりです。

figure syntax put string
項目 説明

STRING

対象文字列を指定します

data-specification

データ指定を参照してください。

4.3. データ指定

GET、PUTステートメントのデータ指定に関する文法は以下のとおりです。

figure syntax dataspec

data list :

image

format list :

image

項目 説明

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));

      上の例は、以下のように処理されます。

      1. ストリームで4文字をAに保存します。

      2. Bの長さをストリームから読み取って、Bに保存します。

      3. 次の4文字は無視します。

      4. 次の6文字は固定小数点フォーマットでCに保存します。

  • 編集ディレクティブ出力

    • 編集ディレクティブ出力は、リスト・ディレクティブ入力、データ・ディレクティブ入力とは異なり、データ間に空白を挿入しません。指定したフォーマット項目どおり、該当データをストリームに保存します。

    • 以下は、編集ディレクティブ出力の例です。

       PUT EDIT(A,B,'edit direct')(SKIP(1),A(2),X(4),F(15,4),COL(30),A(11));

      上の例は、以下のように処理されます。

      1. 1行がスキップされます。

      2. Aを2文字に変換してストリームに保存します。Aが2より長い場合、残りの部分は切り捨てられます。

      3. 空白を4文字分ストリームに保存します。

      4. Bを15桁、精度4の固定小数点型に変換してストリームに保存します。

      5. '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フォーマットに指定した長さがデータ・リスト項目の長さより短いか長い場合には、切り捨てるか、パディングします。長さを指定していない場合は、データ・リスト項目の長さのデータをストリームに保存します。

figure syntax format a
項目 説明

field-width

文字の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値が省略された場合、デフォルト値はデータの長さになります。

4.5.2. Bフォーマット

Bフォーマットは、ビットを出力するためのデータ・フォーマットです。

  • Bフォーマットの入力は、まだサポートされていません。

  • 出力では、データをビットに変換してストリームに保存します。変換規則については、データ変換を参照してください。

figure syntax format b
項目 説明

field-width

ビットの長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値が省略された場合、デフォルト値はデータの長さになります。

4.5.3. COLUMNフォーマット

COLUMNフォーマットは、指定した行の桁に位置を移動させる制御フォーマットです。

  • 入力では、指定した位置に移動し、その間の値は無視されます。

  • 出力では、指定した位置に移動し、その間には空白が挿入されます。

figure syntax format column
項目 説明

character-position

位置を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。

4.5.4. Eフォーマット

Eフォーマットは、浮動小数点を出力するためのデータ・フォーマットです。

  • Eフォーマットの入力は、まだサポートされていません。

  • 出力では、データを浮動小数点に変換し、ストリームに保存します。Eフォーマットに指定した長さがデータの長さより短いか長い場合には、切り捨てるか、パディングします。長さを指定していない場合は、データ・リスト項目の長さのデータをストリームに保存します。

figure syntax format e
項目 説明

field-width

浮動小数点の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません

4.5.5. Fフォーマット

Fフォーマットは、固定小数点を出力するためのデータ・フォーマットです。

  • Fフォーマットの入力は、まだサポートされていません。

  • 出力では、データを固定小数点に変換し、ストリームに保存します。

figure syntax format f
項目 説明

field-width

固定小数点の長さを指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。

fractional-digits

固定小数点の右側にある小数部の桁数を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。この値をfield-widthの値より大きくすることはできません。この値が省略された場合、デフォルト値は0です。

scaling-factor

固定小数点の位取り係数を指定します。指定した値の回数分10を乗算します。負数を指定した場合は、指定した値の回数分10を除算します。

4.5.6. LINEフォーマット

LINEフォーマットは、指定した行に位置を移動させる制御フォーマットです。

  • LINEフォーマットの入力は使用できません。

  • 出力では、指定した行に位置を移動し、その間には空白行が挿入されます。

figure syntax format line
項目 説明

line-number

移動する行を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。

4.5.7. Pフォーマット

Pフォーマットは、ピクチャー文字を出力するためのデータ・フォーマットです。

  • Pフォーマットの入力は、まだサポートされていません。

  • 出力では、データを指定したピクチャー・フォーマットに変換してストリームに保存します。

figure syntax format p
項目 説明

picture-specification

ピクチャー文字の規則を指定します。詳細については、ピクチャー指定を参照してください。

4.5.8. PAGEフォーマット

PAGEフォーマットは、新しいページを開始するための制御フォーマットです。

  • PAGEフォーマットの入力は使用できません。

  • 出力では、新しいページが開始され、行は1に初期化されます。

figure syntax format page

4.5.9. Rフォーマット

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

figure syntax format r
項目 説明

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);

4.5.10. SKIPフォーマット

SKIPフォーマットは、行をスキップする制御フォーマットです。

  • 入力では、指定した値の行をスキップし、その間の行は無視されます。

  • 出力では、指定した値の行をスキップし、その間には空白行が挿入されます。

figure syntax format skip
項目 説明

relative-line

移動する行の値を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。

4.5.11. Xフォーマット

Xフォーマットは、空白を指定する制御フォーマットです。

  • 入力では、指定した値の文字を無視します。

  • 出力では、指定した値の空白を挿入します。

figure syntax format x
項目 説明

field-width

現在の位置から空白で処理する値を指定します。指定した値は整数に変換されます。変換された値は、負数であってはなりません。