データ部

本章では、データ部の構造について説明します。

1. 概要

以下は、データ部の構造とデータの単位、データの関係についての説明です。

  • FILEセクション

    FILEセクションは、データ・ファイルの構造を定義します。FILEセクションは、「FILE SECTION.」というヘッダーで開始します。

    区分 説明

    file-description-entry

    ファイルの物理構造と識別子を定義します。ファイルに関連付けられているレコードを持ちます。

    record-description-entry

    ファイルに関連付けられているデータ記述項目のセットです。

    FILEセクションのレコードは、英字、英数字、DBCS、数字の基本データ項目であるか、または英数字グループ項目である必要があります。

  • WORKING-STORAGEセクション

    WORKING-STORAG​​Eセクションは、ファイルには属せず、プログラム上で使用されるデータ・レコードの構造を定義します。「WORKING-STORAG​​E SECTION.」というヘッダーで開始します。

    区分 説明

    record-description-entry

    階層的な構造のレコードで構成されています。

    data-item-description-entry

    グループ化されていない独立したデータ項目です。 77または01レベルを持ちます。

  • LOCAL-STORAGEセクション

    LOCAL-STORAG​​Eセクションは、呼び出しのたびに解放されて新しく割り当てられるストレージを定義します。VALUE節が指定されたデータ項目は、VALUE値で初期化されます。LOCAL-STORAG​​Eセクションは、「LOCAL-STORAG​​E SECTION.」というヘッダーで開始します。

  • LINKAGEセクション

    LINKAGEセクションは、他のプログラムを介して利用できるデータを定義します。

データの関係
  • データのレベル

    • データ・レコードのレベル番号は、0〜49または66、77、88のいずれかである必要があります。

      レベル番号 説明

      01

      英数字グループ項目、またはレベル01の基本項目になります。

      02 ~ 49

      グループに属しているレコード基本項目、またはグループになります。

      レベル番号項目間の関係により、データ階層を区分することができます。

      以下は、同じレベル番号を使用して階層関係を定義した例です。

      01 GROUP.
         05 SUB01.
            10 ELEM01 PIC X(10).
            10 ELEM02 PIC X(5).
         05 SUB02.
            10 ELEM03 PIC 999.
            10 ELEM04 PIC 999.

      以下に示したように、レベル番号は異なっても、同じ階層に定義することもできます。

      01 GROUP.
         05 SUB01.
            10 ELEM01 PIC X(10).
            10 ELEM02 PIC X(5).
         04 SUB02.
            08 ELEM03 PIC 999.
            08 ELEM04 PIC 999.
    • 特別なレベル番号

      レベル番号 説明

      66

      RENAMES節と一緒に使用されるレベル番号です。以前に定義されたデータ項目を再グループ化して再使用する場合に使用します。

      77

      配下にデータを持たない独立した項目を識別する場合に使用します。

      88

      条件名条件を識別します。

データのクラスおよびカテゴリ

COBOLで使用されるデータとリテラルは、特定のカテゴリとクラスに分類することができます。

  • 基本データ項目のクラス、カテゴリ、および用途

    クラス カテゴリ 用途

    英字

    英字

    DISPLAY

    英数字

    英数字

    DISPLAY

    英数字編集

    DISPLAY

    数字編集

    DISPLAY

    DBCS

    DBCS

    DISPLAY-1

    数字

    数字

    DISPLAY

    PACKED-DECIMAL, COMP-3

    BINARY、COMP、COMP-4、COMP-5

    内部浮動小数点

    COMP-1

    COMP-2

    外部浮動小数点

    DISPLAY

  • 関数のクラスおよびカテゴリ

    関数のタイプ クラスおよびカテゴリ

    英数字

    英数字

    DBCS

    DBCS

    数字、整数

    数字

  • リテラルのクラスおよびカテゴリ

    リテラル クラスおよびカテゴリ

    英数字

    英数字

    DBCS

    DBCS

    数字(固定小数点、浮動小数点)

    数字

データ項目のカテゴリの記述

以下は、データ項目のカテゴリ記述項目についての説明です。各項目の詳細については、PICTURE節項目を参照してください。

  • 英字

    データ項目は、PICTURE文字列によって英字カテゴリとして定義されます。

  • 英数字

    データ項目は、PICTURE文字列によって英数字カテゴリとして定義されます。

    • 英数字グループ項目

    • 英数字関数

  • 英数字編集

    データ項目は、PICTURE文字列によって英数字編集カテゴリとして定義されます。

  • DBCS

    データ項目は、PICTURE文字列によってDBCSカテゴリとして定義されます。USAGE DISPLAY-1を指定する必要があります。

  • 外部浮動小数点

    データ項目は、PICTURE文字列によって外部浮動小数点カテゴリとして定義されます。

  • 内部浮動小数点

    データ項目は、USAGE COMP-1またはUSAGE COMP-2によって、内部浮動小数点カテゴリとして定義されます。

  • 数字

    データ項目は、PICTURE文字列によって数字カテゴリとして定義されます。(BLANK WHEN ZERO節が記述されていない必要があります。)

    • BINARY、COMP、COMP-4、COMP-5、COMP-3、PACKED-DECIMALタイプのUSAGEで記述された基本データ項目

    • 数字関数 / 整数関数

  • 数字編集

    PICTURE文字列によって数字編集カテゴリとして定義されたデータ項目、またはBLANK WHEN ZERO節が記述された数字カテゴリのデータ項目です。

2. ファイル記述項目

環境部のSELECT節で定義したファイルについて説明の開始を示します。FileDescription (FD)、またはSortFileDescription (SD)の後に、ファイル名を記述します。

  • 形式1

    figure dd file description entry format1
    ファイル記述項目 - 形式1
    figure dd file description entry format1 clause1
    ファイル記述項目の形式1 - 節1
    figure dd file description entry format1 clause2
    ファイル記述項目の形式1 - 節2
  • 形式2

    figure dd file description entry format2
    ファイル記述項目 - 形式2
    figure dd file description entry format2 clause1
    ファイル記述項目の形式2 - 節
  • 形式3

    figure dd file description entry format3
    ファイル記述項目 - 形式3
    figure dd file description entry format3 clause1
    ファイル記述項目の形式3 - 節
  • 形式4

    figure dd file description entry format4
    ファイル記述項目 - 形式4
    figure dd file description entry format4 clause1
    ファイル記述項目の形式4 - 節1
    figure dd file description entry format4 clause2
    ファイル記述項目の形式4 - 節2

2.1. FILEセクション

FILEセクションは、各入出力ファイルのレベル標識(FD、SD)を含みます。

項目 説明

file-name

ファイル名は、レベル標識(FD、SD)の後に記述し、関連するSELECT節に記述されている必要があります。ファイル名はプログラム内で一意でなければなりません。

FD(format 1,2,3)

FD項目の最後の節の後には、ピリオド(.)が必要です。

ソート/マージ・ファイルを除くすべてのファイルは、FILEセクションに必ずFD項目を含んでいる必要があります。

SD(format4)

ソート/マージ・ファイルは、FILEセクションにSD項目を含んでいる必要があります。

SD項目の最後の節の後には、必ずピリオド(.)が必要です。

FILEセクションのレコードは、必ず英数字グループ項目、または英字、英数字、DBCS、数字の基本データ項目である必要があります。

2.1.1. EXTERNAL節

EXTERNAL節は、COBOLプログラムの実行単位内(run unit)で、相互に異なるプログラムがファイルを共有できるように指定します。

2.1.2. GLOBAL節

GLOBAL節は、ネストされたプログラムと、ネストしているプログラムとの間でファイルを共有するために指定します。

2.1.3. BLOCK CONTAINS節

BLOCK CONTAINS節は、物理レコードのサイズを定義します。この構文は構文チェックは行われますが、実行には影響を与えません。

2.1.4. RECORD節

RECORD節を使用する場合、レコードのサイズは、レコード内に記述されたデータ項目のUSAGEに関係なく、レコードの保存に必要なバイト数で記述する必要があります。たとえば、10文字のDBCS文字で構成されたレコードがあるとした場合、RECORD節はRECORD CONTAINS 20 CHARACTERSと記述しなければなりません。RECORD節を省略すると、コンパイラーはレコード記述からレコード長を決定します。

形式1

形式1は、固定長レコードのサイズを指定します。

figure dd record clause format1
RECORD CONTAINS形式1
項目 説明

integer-3

レコードのサイズを正の整数で記述します。

形式2

形式2は、固定長または可変長レコードのサイズを指定します。

figure dd record clause format2
RECORD CONTAINS形式2
項目 説明

integer-4

レコードのサイズの最小値を正の整数で記述します。

integer-5

レコードのサイズの最大値を正の整数で記述します。

integer-4とinteger-5が同じである場合、固定長レコードになります。

形式3

形式3は、可変長レコードのサイズを指定します。

figure dd record clause format3
RECORD CONTAINS形式3
項目 説明

integer-6

レコードのサイズの最小値を正の整数で記述します。

integer-7

レコードのサイズの最大値を正の整数で記述します。

data-name-1

符号なし整数型の基本データ項目である必要があります。

RELEASE、REWRITEまたはWRITEステートメントが実行される前に、data-name-1にレコード長を指定する必要があります。

DELETE、RELEASE、REWRITE、START、WRITEステートメントが実行されても、またREADまたはRETURNステートメントの実行に失敗した場合も、data-name-1の値は変わりません。

READまたはRETURNステートメントの実行に成功した場合、data-name-1の値は、直前に取得したレコード長に変わります。

2.1.5. LABEL RECORDS節

LABEL RECORDS節は、ラベルが存在するかどうかを定義します。この構文は構文チェックは行われますが、実行には影響を与えません。

2.1.6. VALUE OF節

VALUE OF節は、ファイルに関連するラベル・レコードを定義します。この構文は構文チェックは行われますが、実行には影響を与えません。

2.1.7. DATA RECORDS節

DATA RECORDS節は、ファイルに関連するデータの名前を定義します。この構文は構文チェックは行われますが、実行には影響を与えません。

2.1.8. LINAGE節

LINAGE節は、論理ページのサイズを行数で指定します。必要に応じて、論理ページのフッター領域の開始位置や上下の余白を指定することもできます。

LINAGE節は、OUTPUTモードまたはEXTENDモードでオープンされている順次ファイルに対して有効です。

項目 説明

data-name-5, integer8

論理ページの行数を指定します。指定された行数で表されるページの領域を、ページ本体といいます。この値は、0より大きくなければなりません。

WITH FOOTING AT

integer-9またはdata-name-6の値は、ページ本体内のフッター領域の開始位置の行番号を指定します。この値は0より大きく、かつページ本体の最後の行番号より大きくてはなりません。

LINES AT TOP

integer-10またはdata-name-7の値は、論理ページの上部の余白を指定します。値は0以上である必要があります。

LINES AT BOTTOM

integer-11またはdata-name-8の値は、論理ページの下部余白を指定します。値は0以上である必要があります。

以下の図は、LINAGE節の各部分を説明するものです。

figure dd linage clause
論理ページ
  • LINES AT TOP句、LINES AT BOTTOM句を指定しない場合、この値は0を仮定します。

  • FOOTING句を省略する場合、ページ本体の値と同じです。(integer-8またはdata-name-5)

  • OPEN OUTPUTステートメントが実行される時点で、integer-8、integer-9、integer-10、integer-11の値が指定されている場合、それらの値はプログラムの実行中に論理ページを構成する値として使用されます。

  • OPEN OUTPUTステートメントが実行される時点で、data-name-5、data-name-6、data-name-7、data-name-8の値が指定されている場合、それらの値は最初の論理ページを構成します。以降、WRITEステートメントが実行され、ページが移る時点で、data-name-5、data-name-6、data-name-7、data-name-8の値はまた新しい論理ページを構成します。

  • SDに記述されたLINEAGE節は、構文チェックだけが行われ、実行には影響を与えません。

  • ファイルごとにLINAGE-COUNTER特殊レジスターが存在します。

2.1.9. RECORDING MODE節

RECORDING MODE節は、ファイルの物理レコードの形式を指定します。VSAMファイルに対しては無視されます。

項目 説明

Recording mode F(fixed)

すべてのレコードが同じ長さを持ちます。

Recording mode V(variable)

レコードは可変長を持ちます。

2.1.10. CODE-SET節

CODE-SET節は、磁気テープ・ファイルの文字コードを指定します。この構文は構文チェックは行われますが、実行には影響を与えません。

3. データ記述項目

データ記述項目は、データ項目の属性を指定します。データ記述項目のセットをレコード記述項目といいます。1つの独立したデータ項目を定義するデータ記述項目は、データ項目記述項目といいます。データ記述項目は、以下のように3つの形式があります。

形式1
figure dd format1
データ記述項目 - 形式1

次のような例外を除いては、それぞれのセクションは任意の順序で指定することができます。

  • data-name-1またはFILLERを指定する場合、それらを必ずレベル番号の直後に記述する必要があります。レベル番号としては、01から49までの数字、または77を指定できます。

  • REDEFINES節は、data-name-1またはFILLERの直後に記述する必要があります。data-name-1またはFILLERを指定しない場合は、レベル番号の直後にREDEFINES節を記述します。

形式2
figure dd format2
データ記述項目 - 形式2
項目 説明

level-66 entry

レベル66の項目は、他のレベル66の項目、またはレベル01、レベル77、レベル88の項目の名前を変更することはできません。

特定のレコードに関連付けられているレベル66の項目は、そのレコードの直後に​​記述しなければなりません。

形式3
figure dd format3
データ記述項目 - 形式3
項目 説明

level-88 entry

レベル88の項目は、必ず条件変数を指定したデータ記述項目の直後に記述する必要があります。

condition-name-1

VALUE節に指定された単一の値または複数の値、または範囲の値を条件変数に関連付けるために、ユーザーが定義した名前です。

3.1. LEVEL NUMBER節

LEVEL NUMBER節は、レコード内のデータの階層構造を表現し、また名前を変更したり再定義した項目、条件名項目を識別するために指定します。

figure dd level number
LEVEL NUMBER節の形式
  • level-number

    • レベル番号は、1から49の間の数字、または66、77、88のいずれかを指定することができます。

    • 01および77は、領域Aで開始する必要があり、データ名、FILLER、またはその他のデータ記述節と空白文字で区切られる必要があります。

      02から49は、領域Aまたは領域Bのどちらでも開始することができ、データ名、FILLER、またはその他のデータ記述節と空白文字で区切られる必要があります。

      66と88は、領域Aまたは領域Bのどちらでも開始することができ、データ名、FILLER、またはその他のデータ記述節と空白文字で区切られる必要があります。

    • 1桁のレベル番号1から9を指定した場合は、レベル番号01から09を指定した場合と同様に処理します。

    • データ記述項目は、最初の項目と同じ列から開始することも、またはレベル番号に合わせてインデントすることもできます。インデントはコードの可読性を高めるためのもので、インデントしてもレベル番号に変化はありません。インデントする列数は、領域Bのサイズを超えない限り、制限はありません。

  • data-name-1

    • data-name-1は、プログラム内のデータ項目を区分する識別子です。data-name-1は必ずレベル番号の直後に記述する必要があります。

    • data-name-1は、レベル66およびレベル88の項目に対しては必ず記述する必要があります。

  • FILLER

    • FILLERは、メモリの境界を整列するために指定します。FILLERに指定された項目は、プログラム内で参照することができません。

    • FILLERキーワードはオプションです。FILLERを指定する場合は、レベル番号の直後に続けて指定する必要があります。

    • FILLERは条件変数には指定できますが、条件名には指定することができません。

    • MOVE CORRESPONDINGステートメント、ADD CORRESPONDINGステートメント、またはSUBTRACT CORESPONDINGステートメントを実行時には、FILLER項目は無視されます。また、INITIALIZEステートメントの実行時にも、FILLER項目は無視されます。

data-name-1またはFILLERが指定されていない場合、そのデータ項目はFILLERが指定されたものとみなされます。

3.2. BLANK WHEN ZERO節

BLANK WHEN ZERO節は、データ値が0である場合、データ値を0以外の空白で保存するために指定します。

figure dd blankwhenzero
BLANK WHEN ZERO節の形式

次の規則に従って指定します。

  • BLANK WHEN ZERO節は、数字編集または数字カテゴリの基本データ項目にのみ指定することができます。

  • PICTURE文字列として「S」または「*」文字は指定できません。DISPLAY用途でのみ使用できます。

  • 数字カテゴリのデータに対してBLANK WHEN ZERO節を指定する場合、そのデータ項目を数字編集カテゴリ項目として認識します。

3.3. JUSTIFIED節

JUSTIFIED節は、英字、英数字カテゴリの項目にデータをコピーする場合に、文字を右揃えするために指定します。

figure dd justified
JUSTIFIED節の形式

JUSTIFIED節は基本データ項目にのみ指定することができます。JUSTは、JUSTIFIEDの省略形です。

次のような場合には、JUSTIFIED節を指定することができません。

  • 数字、数字編集、英数字編集カテゴリのデータ項目

  • 指標データ項目

  • USAGE FUNCTION-POINTER、USAGE POINTER、USAGE PROCEDURE-POINTERが指定されている場合

  • 外部浮動小数点項目および内部浮動小数点項目

  • レベル66(RENAME)、レベル88(条件名)のデータ項目

JUSTIFIED節が指定された項目にデータをコピーする場合、データの文字は右揃えされます。コピー元の項目がコピー先の項目より大きい場合は、左端の文字から超過分の文字が切り捨てられます。コピー元の項目がコピー先の項目より小さい場合は、残りのスペースが空白で埋められます。

ただし、システムロケールがja_JP.sjis、ja_JP.SJIS、ja_JPの場合、Gタイプの変数にJUST RIGHTオプションを指定すると、空のスペースが2バイト・スペース(0x8140)で埋められます。

3.4. EXTERNAL節

EXTERNAL節は、COBOLプログラムの実行単位内(run unit)の異なるプログラムがデータ項目を共有するように指定します。UNIX環境では、別々にコンパイルされた共有ライブラリ形式のプログラム間でデータを共有するために使用します。

EXTERNAL節は、WORKING-STORAGEセクションのレベル01のデータ記述項目でのみ指定することができます。

外部属性が指定されたレベル01のデータ項目がレコード項目である場合、指標項目以外は、このレコード項目に属するサブデータ項目も外部属性を持ちます。

異なるプログラムで外部属性を指定してデータを共有する場合、それぞれのプログラムで外部データ・レコードの名前はすべて同じであり、同じサイズを持つ必要があります。

3.5. GLOBAL節

GLOBAL節は、ネストされたプログラムと、ネストしているプログラムとの間でデータを共有するために指定します。

ネストされたプログラムで、グローバル属性が指定された項目と同じ名前を持つデータ項目を指定している場合は、ネストされたプログラムのそのデータ項目はグローバル・データ項目ではありません。グローバル属性が指定されたレコード項目に属するデータ名、条件名、指標はすべてグローバル名になることができます。

GLOBAL節は、WORKING-STORAGEセクション、LINKAGEセクション、LOCAL-STORAGEセクション、FILEセクションに指定することができます。ただし、レベル01のデータ記述項目にのみ指定できます。

同じデータ部内に同じ名前を持つデータ項目がある場合、そのデータ項目にGLOBAL節を含めることはできません。グローバル名を指定したプログラムに直接的または間接的に含まれているプログラムで、グローバル名は再度指定しなくても参照することができます。

3.6. OCCURS節

OCCURS節は、指標または添え字を使って要素を参照する表を定義します。記述されたデータ項目のデータ名をOCCURS節のサブジェクトといいます。OCCURS節のサブジェクト、またはこのデータ項目に従属する副項目を参照するには、指標や添え字を使用する必要があります。ただし、次のような場合には、指標や添え字を使用しません。

  • サブジェクトがSEARCHステートメントのサブジェクトとして使用された場合

  • サブジェクトまたはサブジェクトに従属するデータ項目がASCENDING/DESCENDING KEY句のオブジェクトである場合

  • サブジェクトに従属する項目がREDEFINES節のオブジェクトである場合

次のようなデータ記述項目には、OCCURS節を指定してはなりません。

  • レベル01、66、77、88のデータ項目

  • 再定義されるデータ項目

表は固定長の表と可変長の表があり、それぞれの設定方法は異なります。

固定長の表

固定長の表は、OCCURS節に表のサイズを文字定数で指定して記述します。

figure dd fixed length table
OCCURS節の形式1:固定長の表
  • integer-2

    • integer-2は、表のサイズを指定する値で、0より大きい正の整数値を指定します。

  • ASCENDING KEY句およびDESCENDING KEY句

    • ASCENDINGまたはDESCENDINGの指定に応じて、データが昇順または降順に並べ替えられます。データの並べ替え順序は、data-name-2の値に基づいて決定されます。

    • 以下は、data-name-2項目についての説明です。

      項目 説明

      data-name-2

      data-name-2は、サブジェクト項目またはサブジェクト項目に従属するデータ項目の名前です。

      data-name-2がサブジェクト項目の名前である場合は、その項目の全体がASCENDING KEYまたはDESCENDING KEYになり、その表に対して指定できる唯一のキーとなります。

      data-name-2がサブジェクト項目の名前でない場合は、サブジェクトに従属する副項目である必要があり、副項目や自身にOCCURS節が指定されていてはなりません。

    • ASCENDING KEY句またはDESCENDING KEY句を指定する場合は、次の規則に従います。

      • キーは、レベルの高い順に左から右に指定します。

      • キーは、最大12個を超えないようにします。

      • 表内のデータは、昇順または降順に並べ替えられている必要があります。

      • キーとして指定できるデータ項目は、BINARY、DISPLAY、DISPLAY-1、PACKED-DECIMAL、COMP、COMP-1、COMP-2、COMP-3、COMP-4、COMP-5です。

  • INDEXED BY句

    • INDEXED BY句は、その表で使用される指標を指定します。

      項目 説明

      index-name-1

      index-name-1は指標の名前で、コンパイラーによって生成される指標を指定するため、プログラム内に別途のデータを記述する必要はありません。index-name-1の範囲は、指標が指定されている表の名前の範囲と同じです。

可変長の表

可変長の表は、次の図に示したように、OCCURS DEPENDING ON節を使用して指定します。

figure dd variable length table
OCCURS節の形式2:可変長の表
項目 説明

integer-1

可変長の表の最小サイズを指定する値で、0より大きい正の整数値である必要があり、可変長の表の最大サイズを指定するinteger-2よりは小さいか同じ値である必要があります。

integer-1を省略する場合、可変長の表の最小サイズは1です。

integer-2

可変長の表の最大サイズを指定する値で、integer-1より大きいか同じ値である必要があります。

data-name-1

OCCURS DEPENDING ON節のオブジェクトを設定します。

データ項目の現行値が表の数を決定します。オブジェクトは、整数型のデータ項目である必要があります。また、表内の記憶領域を占めてはなりません。つまり、サブジェクトのサブデータ項目を指定してはなりません。オブジェクトに指定されたデータ項目は、OCCURS DEPENDING ON節を指定できません。OCCURS節がGLOBAL節を含んでいる項目の副項目である場合は、オブジェクトもグローバル名である必要があります。

3.7. PICTURE節

PICTURE節は、基本項目のカテゴリ、データ・サイズ、編集属性を指定します。

figure dd picture
PICTURE節の形式
項目 説明

PICTUREまたはPIC

PICは、PICTUREの省略形です。PICTURE節は、以下のような場合を除き、基本データ項目に必ず記述する必要があります。

  • 指標データ項目

  • RENAME節を記述した場合

  • USAGE POINTER、USAGE FUNCTION-POINTER、USAGE-PROCEDURE-POINTERが記述されている場合

  • 内部浮動小数点データ項目

文字列

文字列は、PICTURE記号で構成され、基本データ項目のカテゴリとデータ・サイズを決定します。

PICTURE記号

以下は、PICTURE記号として使用される文字です。小文字と大文字は同じ働きをします。

A B E G P S V X Z 9 0 / , . + - *

SPECIAL-NAMES段落にDECIMAL-POINT IS COMMAが指定されている場合は、ピリオド(.)文字はコンマ(,)に、コンマはピリオドに変更されます。

以下の表は、PICTURE記号の機能と各文字がデータ項目で占めるサイズを表したものです。

記号 機能

A

  • ラテン・アルファベットまたは空白を保存できる文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

B

  • USAGE DISPLAYに対して空白文字を挿入する文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

E

  • 外部浮動小数点項目の指数の開始点を指定します。

  • サイズ:1バイト

G

  • DBCS文字位置を指定します。(繰り返し指定が可能)

  • サイズ:2バイト

P

  • 想定小数点(assumed decimal point)を指定します。左端または右端に複数回指定することができます。

  • サイズ:実際の記憶領域を占有しません。

S

  • 演算符号が存在するかどうかを指定します。(一度だけ指定可能)

  • サイズ:実際の記憶領域を占有しません。ただし、SIGN節にSEPARATE CHARACTER句が指定されている場合は、演算符号もデータ項目内で1バイトの記憶領域を占有します。

V

  • 想定小数点の位置を指定します。(一度だけ指定可能)

  • サイズ:実際の記憶領域を占有しません。

X

  • 英数字文字を保存できる文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

Z

  • 有効数字の左側の0を空白で置き換える文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

9

  • 数字を保存できる文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト(英数字、数字編集カテゴリのデータ項目は1バイトを占めますが、数字カテゴリのデータ項目は、USAGEの指定に応じて記憶領域の計算が変わります)

/

  • スラッシュ(/)を挿入する文字位置を指定します。

  • サイズ:1バイト

0

  • 数字0を挿入する文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

,

  • コンマ(,)を挿入する文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

.

  • 想定小数点(.)を挿入する文字位置を指定します。(一度だけ指定可能)

  • サイズ:1バイト

+/-

  • 編集符号を挿入する文字位置を指定します。

  • サイズ:1バイト

CR/DB

  • 編集符号を挿入する文字位置を指定します。

  • サイズ:2バイト

*

  • 有効数字の左側の0をアスタリスク(*)で置き換える文字位置を指定します。(繰り返し指定が可能)

  • サイズ:1バイト

cs(currency sign)

  • csは通貨記号を表し、通貨記号を挿入する文字位置を指定します。デフォルトの通貨記号はドル記号($)であり、SPECIAL-NAMES段落のCURRENCY SIGN節の設定に応じて変更することができます。

  • 通貨記号が最初に出現したときは、通貨記号の文字数分の記憶領域を占有します。それ以降、通貨記号が出現した(通貨記号が空白で表示される)位置では、1バイトの記憶領域を占有します。

下の表は、PICTURE記号を指定して、PICTURE文字列を構成する順序を表したものです。

figure dd order of picture character strings
PICTURE文字列の相対的な指定順序
記号 説明

文字列において、その列の最上端の記号が指定された場合、その次に指定可能な記号を示します。

{}

中括弧内に記述された記号は、一緒に指定できないことを示します。

重複して表記された記号

固定挿入記号 {+ - }、浮動挿入記号 {Z *}、{+ - }、cs、そしてPは重複して指定することができます。左端の列または最上端の行にある各記号は、小数点の左側で使用される記号を示し、その次にある記号は、小数点の右側で使用される記号を示します。

データ・カテゴリ

PICTURE記号を組み合わせることによって、次のようなデータ・カテゴリに分類することができます。

  • 英字

    • PICTURE文字列に 記号Aだけを指定できる項目です。項目の値には、ラテン・アルファベットと空白文字、表意定数の記号文字だけを含めることができます。

    • 英字項目は、USAGE DISPLAYを明示的に指定するか、または暗黙的に指定されているとみなします。

  • 数字

    • PICTURE文字列に 9、P、V、S記号だけを指定できる項目です。

    • USAGE節に、2進数、パック10進数(内部10進数)、ゾーン10進数(外部10進数)が指定されている数字項目です。

    • 数字項目のタイプは、次の表のとおりです。

      タイプ USAGE節

      Binary

      BINARY, COMP, COMP-4, COMP-5

      Internal decimal

      PACKED-DECIMAL, COMP-3

      Zoned decimal(external decimal)

      DISPLAY

      • 記号Sは、PICTURE文字列の左端にのみ指定することができます。

      • 記号Vは、PICTURE文字列に一度だけ指定することができます。

      • バイナリ・タイプの場合、指定可能な桁数は最大18桁までです。

    • 内部10進数およびゾーン10進数タイプの場合、指定可能な桁数は最大31桁までです。

    • VALUE節で指定可能な項目は、数値リテラルまたは表意定数ZEROです。

    • 以下は、PICTURE記号の有効範囲の例です。

      PICTURE 値の有効範囲

      PICTURE

      値の有効範囲

      9999

      0 ~ 9999

      S99

      -99 ~ +99

      S9999V99

      -9999.99 ~ +9999.99

      PPP999

      0 ~ 0.000999

      S999PPP

      -1000 ~ -999000、1000 ~ 999000、0

  • 数字編集

    • PICTURE文字列として指定した記号によって、特定の位置に特定の文字を挿入したり、特定の文字を置き換えたりする項目です。

    • PICTURE文字列に、 B P V Z 9 0 / , . + - CR DB * cs記号を指定できます。

    • 数字編集項目には、以下のような規則が適用されます。

      • BLANK WHEN ZERO節が指定されている場合

      • PICTURE文字列にB / Z 0 , . * + - CR DB cs記号が少なくとも1つ以上指定されている場合

      • PICTURE文字列に+ - CR DB記号が1つだけ指定されている場合

    • 最大31桁の数字を指定できます。

    • PICTURE文字列の最大文字数は、249を超えることができません。

    • USAGE DISPLAYを指定した場合、VALUE節には英数字リテラルまたは表意定数を指定する必要があります。

  • 英数字

    • PICTURE文字列に、 Xだけが指定されているか、または X、A、9の組み合わせで指定されている項目です。項目の値は、コンピュータの文字セットで指定可能なすべての文字を含むことができます。項目は、すべての文字が記号Xで構成されているとみなされます。

    • 英数字項目は、USAGE DISPLAYを明示的に指定するか、または暗黙的に指定されているとみなします。

    • VALUE節には、英数字リテラルを指定するか、またはZERO、SPACE、QUOTE、HIGH-VALUE、LOW-VALUE、記号文字、ALL英数字リテラルなどの表意定数を指定することができます。

  • 英数字編集

    • PICTURE文字列に、A、X、9、B、0、/ を指定できます。

    • PICTURE文字列には、少なくとも1つのAまたはX、少なくとも1つのBまたは0または /が含まれている必要があります。

    • 英数字編集項目は、USAGE DISPLAYを明示的に指定するか、または暗黙的に指定されているとみなします。

    • VALUE節には、英数字リテラルを指定するか、またはZERO、SPACE、QUOTE、HIGH-VALUE、LOW-VALUE、記号文字、ALL英数字リテラルなどの表意定数を指定することができます。

  • DBCS

    • PICTURE文字列に、記号Gを指定する項目であり、1つの記号Gに対応する1文字は2バイトの記憶領域を占有します。

    • PICTURE記号Gを指定する場合は、USAGE DISPLAY-1を明示的に指定するか、または暗黙的に指定されているとみなします。

    • VALUE節には、DBCSリテラル、表意定数SPACE、または表意定数ALL DBCSリテラルを指定する必要があります。

  • 外部浮動小数点

    • 外部浮動小数点項目は、符号、仮数、E、符号、指数で構成されます。

      image

      項目 説明

      + -

      • 仮数の左側に指定された符号は、外部浮動小数点の符号を指定します。+符号は正の値を示し、-符号は負の値を示します。

      • 指数の左側に指定された符号は、外部浮動小数点の符号を指定します。+符号は正の値を示し、-符号は負の値を示します。

      • +符号を指定した場合:正の値を表すときは +符号で、負の値を表すときは -符号で出力します。

      • -符号を指定した場合:正の値を表すときは空白文字で、負の値を表すときは -符号で出力します。

      mantisa

      • mantissaは仮数を示し、9、ピリオド(.)、V記号を指定することができます。

      • Vまたはピリオド(.)のいずれかを指定して、小数点を表示します。

      • 仮数は、最大16文字まで指定できます。

      E

      指数の開始を示します。

      exponent

      exponentは指数を示し、記号99で指定する必要があります。

    • USAGE DISPLAYを指定すると、DISPLAY浮動小数点データ項目として定義します。

    • V以外のすべての文字は、実際の記憶領域を占有します。

    • OCCURS、REDEFINES、RENAME節は、外部浮動小数点項目と一緒に指定することができます。

    • BLANK WHEN ZERO、JUSTIFIED、VALUE節は、外部浮動小数点項目と一緒に指定することができません。

    • SIGN、SYNCHRONIZED節を指定した場合、その節は無視されます。

位置合わせ規則

基本項目のデータの位置合わせは、データがコピーされる項目のカテゴリに応じて、以下の規則に従います。

  • 数字

    • 想定小数点を基準にデータを位置合わせします。必要に応じて、切り捨てや0埋めが行われます。

    • 想定小数点が指定されていない場合は、データの右端に想定小数点が指定されていると仮定し、データの位置合わせをします。

  • 数字編集

    • 小数点を基準にデータの位置合わせをします。必要に応じて、左端または右端から切り捨てや0埋めが行われます。

  • 内部浮動小数点

    • フィールドの左端に小数点があると仮定し、この小数点以下の数字を左揃えします。

  • 外部浮動小数点

    • データは左揃えされます。それに応じて、指数も調整されます。

  • 英数字、英数字編集、英字、DBCS

    • データは左揃えされます。必要に応じて、切り捨てや0埋めが行われます。

    • JUSTIFIED節が指定されている場合、位置合わせ規則に基づいてデータの位置合わせが行われます。

文字列と項目のサイズ

以下は、PICTURE文字列、SIGN節、USAGE節の組み合わせで、基本項目のサイズを比較する説明です。

USAGE節 説明

USAGE DISPLAY

項目のPICTURE文字列、またはSIGN IS SEPARATE節が指定されている場合、符号は1バイトを占めます。

USAGE DISPLAY-1

項目のPICTURE文字列は2バイトを占めます。

USAGE COMP, COMP-4, BINARY

USAGE節のバイナリ形式のデータ項目のサイズを参照します。

USAGE COMP-1

4バイト

USAGE COMP-2

8バイト

USAGE COMP-3, PACKED-DECIMAL

USAGE節のパック10進数形式のデータ項目のサイズを参照します。

USAGE COMP-5

USAGE節のネイティブ形式のデータ項目のサイズを参照します。

符号付きデータ

以下は、符号付きデータについての説明です。

符号付きデータ 説明

演算符号

演算符号は、符号付き数字項目に付けられる符号です。数学的に+は正の値、-は負の値の属性を持ちます。演算符号の内部表現は、USAGE節、SIGN節、およびオペレーティング・システムの環境によって決定されます。

編集符号

数字編集項目に指定する符号です。DISPLAYステートメントなどを使用してデータを出力するときに出力される「+」または「-」符号です。

PICTURE節の編集

PICTURE節を編集する方法は、挿入による編集と、抑止および置換による編集の2つがあります。

  • 挿入編集

    • 単純挿入による編集

      それぞれのPICTURE記号は、等価の文字が挿入されるデータ項目内の位置を表します。

      英数字編集、数字編集、およびDBCSデータ項目に指定することができます。

      以下は、単純挿入による編集の例です。

      PICTURE データ値 編集結果

      X(10)/XX

      ALPHANUMER01

      ALPHANUMER/01

      X(5)BX(7)

      ALPHANUMERIC

      ALPHA NUMERIC

      99,B999,B000

      1234

      01, 234, 000

      99,999

      12345

      12,345

      GGBBGG

    • 特別挿入による編集

      数字編集項目、外部浮動小数点データ項目に指定することができます。小数点を表現するデータ項目の位置に、ピリオド(.)記号が挿入されます。

      PICTURE データ値 編集結果

      999.99

      1.234

      001.23

      999.99

      12.34

      012.34

      999.99

      123.45

      123.45

      999.99

      1234.5

      234.50

      +999.99E+99

      12345

      +123.45E+02

    • 固定挿入による編集

      PICTURE文字列の中に、1つの通貨記号と、+、- 、CR、DBなどの符号を指定することができます。

      数字編集データ項目に指定できます。

      • +、- などの符号を指定しない場合、通貨記号が文字列の最初の文字である必要があります。+、- 符号を指定する場合は、文字列の左端または右端に指定する必要があります。

      • CRまたはDBは、文字列内の右端に指定する必要があり、2バイトを占めます。

      以下は、固定挿入編集記号によって作成されるデータ項目の結果値です。

      編集記号 データ項目が正数または0の場合の結果値 データ項目が負数の場合の結果値

      +

      +

      -

      -

      空白

      -

      CR

      空白 * 2

      CR

      DB

      空白 * 2

      DB

      以下は、固定挿入による編集の例です。(bは空白を示します)

      PICTURE文字列 データ値 結果値

      999.99+

      +6555.556

      555.55+

      +9999.99

      -6555.555

      -6555.55

      9999.99

      +1234.56

      1234.56

      $999.99

      -123.45

      $123.45

      -$999.99

      -123.45

      -$123.45

      -$999.99

      +123.456

      b$123.45

      $9999.99CR

      +123.45

      0123.45bb

      $9999.99CR

      -123.45

      $0123.45CR

    • 浮動挿入による編集

      浮動挿入は、数字編集データ項目にcs、+、- 符号を指定することができます。

      以下は、浮動挿入を実行する方法です。

      1. 小数点の左側のすべての文字位置またはその一部を浮動挿入記号で指定する場合、左から右に向かって最初に0以外の数字が出現した直前に、指定した符号文字、または +、- の挿入が行われます。挿入された文字の左側の文字位置はすべて空白で埋められます。データ値の小数点以下がない場合は、挿入文字分の0が挿入されます。文字列をすべて挿入文字で指定する場合は、少なくとも1つの浮動挿入記号は小数点の左側に位置しな​​ければなりません。

      2. PICTURE文字列をすべて浮動挿入記号で指定する場合、データ値が0の場合は、PICTURE文字列に指定した浮動挿入記号分の空白が挿入されます。データ値が0でない場合は、1番の方法によって挿入編集が行われます。

      以下は、浮動挿入による編集の例です。(bは空白を示します)

      PICTURE文字列 データ値 結果値

      $$$$.99

      .123

      bbb$.12

      $$$9.99

      .12

      bb$0.12

      $,$$$,999.99

      -1234.56

      bbb$1,234.56

      +,+++,999.99

      -123456.789

      bb-123,456.78

      $$,$$$,$$$.99CR

      -1234567

      $1,234,567.00CR

      ++,+++,+++.+++

      0000.00

      bbbbbbbbbbbbbb

      ++,+++,+++.+++

      123456

      bbbb+12,345.000

  • ゼロ抑制と置換による編集

    • ゼロ抑制と置換による編集は、ゼロ以外の数字の左側にある0を空白またはアスタリスク(*)で置き換えます。PICTURE文字列にZ、*、+、-、cs記号を指定します。Z、*、+、-、cs記号は、組み合わせて指定することができません。

    • 小数点の左側のすべての文字位置または一部をゼロ抑制記号で指定する場合、最も左端にある0​​以外の数字の直前までゼロ抑制が行われます。

    • 小数点の左右をゼロ抑制記号で指定し、データ項目の値が0の場合は、指定したゼロ抑制記号が編集されます。

    • ゼロ抑制と置換による編集は、次の規則に従います。

      • 記号Zが指定されている場合は、データ項目がすべて空白で埋められます。

      • アスタリスク(*)記号が指定されている場合は、データ項目の小数点の位置を除き、すべてアスタリスクで埋められます。

    • 以下は、ゼロ抑制の例です。(bは空白を示します)

      PICTURE文字列 データ値 結果値

      ****.**

      0000.00

      ****.**

      ZZZZ.ZZ

      0000.00

      bbbbbbb

      ZZZZ.99

      0000.00

      bbbb.00

      ****.99

      0000.00

      ****.00

      ZZ99.99

      0000.00

      bb00.00

      Z,ZZZ.ZZ+

      +123.456

      bb123.45+

      *,***.**+

      -123.45

      **123.45-

      **,***,***.**+

      +12345678.9

      12,345,678,90+

      $Z,ZZZ,ZZZ.ZZCR

      +12345.67

      $bbb12,345.67bb

      $B*,***,***.**BBDB

      -12345.67

      $b***12,345.67bbDB

3.8. REDEFINES節

REDEFINES節は、同じ記憶領域を異なるデータ記述項目で再定義します。したがって、異なるデータ記述を持つデータ項目が同じ記憶領域を占有することになります。

figure dd redefines
REDEFINES節の形式
  • data-name-1, FILLER

    • data-name-2によって指定されたデータ領域の別のデータ記述です。data-name-1を再定義する項目、またはREDEFINES節のサブジェクトといいます。

    • data-name-1だけでなく、data-name-1に従属する項目は、VALUE節を設定してはなりません。

    • data-name-1またはFILLERを指定しない場合は、REDEFINES節はレベル番号の直後に指定する必要があります。

  • data-name-2

    • data-name-2を再定義される項目、またはREDEFINES節のオブジェクトといいます。

    • data-name-2は、REDEFINES節を指定することができます。しかし、OCCURS節は指定できません。ただし、data-name-2の上位項目にはOCCURS節を指定することができます。

項目を設定するときは、次の規則に従います。

  • data-name-1とdata-name-2のどちらにも、OCCURS DEPENDING ON節は指定できません。

  • data-name-1とdata-name-2は、階層構造において同じレベルになければなりません。ただし、同じレベル番号を持つ必要はありません。

  • data-name-1とdata-name2はいずれも、レベル66、レベル88で指定することはできません。

  • data-name-1に従属する項目は、すべて再定義に含まれます。

  • REDEFINES節およびEXTERNAL節は同時に指定できません。

REDEFINES節の参考事項

以下は、REDEFINES節を設定する際の参考事項です。

  • REDEFINES節とGLOBAL節を一緒に指定する場合、再定義するデータ項目だけがGLOBAL属性を持ちます。

  • EXTERNAL節は、REDEFINES節と一緒に指定することができません。

  • 再定義されるデータ項目に外部属性を指定する場合、再定義するデータ項目のサイズは再定義されるデータ項目のサイズより大きくすることができません。

  • 再定義する項目のデータ・サイズは、再定義される項目のデータ・サイズより大きくても構いません。

  • 再定義される項目と再定義する項目は連続して記述する必要があります。つまり、両項目の間にREDEFINES節と関係ない項目を記述してはなりません。

    ただし、以下のように、同じ項目に対して再定義されるデータが連続する場合は可能です。

    05 ITEM-A PICTURE 999999.
    05 ITEM-B REDEFINES ITEM-A PICTURE 99999.
    05 ITEM-C REDEFINES ITEM-A PICTURE 99999.
  • 再定義される項目と再定義する項目のUSAGEは同一である必要はありません。異なるUSAGEを指定しても、データの形式や内容は変更されません。

  • 再定義される項目を再定義する項目に移動したり、逆に再定義する項目を再定義される項目に移動したりした場合は、正常な動作を保証できません。

3.9. RENAMES節

1つまたは複数のデータ項目をグループに指定して、新しいレコードとして定義します。

RENAMES節が指定されたデータ記述項目は、必ずレベル66で開始する必要があります。1つのレコードに対して複数のRENAMES属性を指定することができます。

figure dd renames
RENAMES節の形式
  • data-name-1

    • 新しくグループ化された項目を識別する識別子です。

    • レベル66の項目は、レベル01、レベル77、レベル88、または別のレベル66の項目を再定義することはできません。

    • data-name-1は、レベル01の項目により修飾することができますが、他の項目の修飾子としては使用できません。

  • data-name-2, data-name-3

    • data-name-2およびdata-name-3は、それぞれ新しくグループ化する最初のデータ項目と最後のデータ項目の識別子であり、基本データ項目または英数字グループ項目を指定することができます。

    • この2つのデータ名は、同じ項目を表すことはできません。両方とも修飾することはできます。

    • data-name-2、data-name-3、またその上位項目には、OCCURS節を指定することができません。また、data-name-2とdata-name-3の間にある項目には、OCCURS DEPENDING節を指定することができません。

  • THRU

    • THROUGHの略語です。

注意事項

data-name-2とdata-name-3を記述した場合は、次の事項に注意して設定します。

  • data-name-1は、次の規則に従って、data-name-2から、data-name-3までのすべての基本項目を含む英数字グループ項目を新しく定義します。

    • data-name-2が基本項目である場合は、data-name-2を開始項目として設定します。

    • data-name-2がグループ項目である場合は、data-name-2に属する最初の基本項目を開始項目として設定します。

    • data-name-3が基本項目である場合は、data-name-3を終了項目として設定します。

    • data-name-3がグループ項目である場合は、data-name-3に属する最後の基本項目を終了項目として設定します。

  • 開始項目から終了項目までが保存している記憶領域が、data-name-1によって占有される記憶領域となります。

  • data-name-2は、data-name-3より前に位置する必要があります。

  • data-name-3は、data-name-2に完全に従属する副項目になることはできません。

data-name-2だけを記述した場合は、次の事項に注意して設定します。

  • data-name-2が保存している記憶領域が、data-name-1によって占有される記憶領域となります。

  • data-name-1は、data-name-2の属性と同じ属性を持ちます。

  • data-name-2が英数字グループ項目である場合は、data-name-1も英数字グループ項目になります。

  • data-name-2が基本項目である場合は、data-name-1も基本項目になります。

3.10. SIGN節

SIGN節は、符号付き数字項目に対して符号の表現方法と表示位置を指定します。PICTURE文字列に 記号Sが指定され、USAGE DISPLAYが指定されている基本数字項目、またはそのような基本項目を持つグループ項目に指定することができます。

figure dd sign
SIGN節の形式

SIGN節が、グループ項目とそのグループ項目に属する基本項目の両方に指定されている場合は、基本項目に属するSIGN節が優先されます。SEPARATE CHARACTER句が指定されている場合は、PICTURE文字列に指定された記号Sも、1バイトの記憶領域を占めます。

3.11. SYNCHRONIZED節

SYNCHRONIZED節は、コンピュータの記憶領域の境界に合わせて、未使用の遊びバイトを挿入して位置合わせを調整します。

figure dd synchronized
SYNCHRONIZED節の形式

SYNCは、SYNCHRONIZEDの省略形です。SYNCHRONIZEDは必須ではありませんが、バイナリ項目を使用する際のパフォーマンスを向上させるために使用されます。基本項目に対して指定することができます。LEFT句とRIGHT句の設定は、プログラムの実行には影響を与えません。

以下では、SYNCHRONIZED節が他の要素に与える影響について説明します。

  • OCCURS節

    それぞれのオカレンスに属性が適用されます。

  • USAGE DISPLAY, PACKED-DECIMAL, COMP-3, DBCS, 外部浮動小数点

    属性に影響はありません。

  • USAGE COMP, COMP-4, COMP-5, BINARY

    REDEFINES節を含む項目に属する最初の基本項目に対して指定する場合は、文字位置を追加する必要がありません。

    SYNC節が従属データ項目に指定されていなければ、PICTURE節がS9 ~ s9(4)の範囲にある場合は、2の倍数の変位に位置合わせをし、PICTURE節がS9(5) ~ S9(18)の範囲にある場合は、4の倍数の変位に位置合わせをします。

  • USAGE COMP-1

    データはフルワード境界で位置合わせされます。

  • USAGE COMP-2

    データはダブルワード境界で位置合わせされます。

  • REDEFINES節

    REDEFINES節のオブジェクトは、REDEFINES節のサブジェクトと必ず適切に境界の位置合わせをする必要があります。

遊びバイト

遊びバイトを追加する規則は、以下のとおりです。

  • バイナリ項目の前にあるすべての基本データ項目が占めるバイト・サイズを足した値をsとします。

  • このsをmで除算します。mは、4桁以下のバイナリ項目である場合は2、4桁を超えるバイナリ項目、COMP-1、INDEX、POINTER、PROCEDURE-POINTER、FUNCTION POINTERである場合は4、COMP-2の場合は8です。

  • この演算の余りをrとすると、m - r のサイズの遊びバイトを挿入します。

以下は、SYNC節を使用して遊びバイトを挿入する例です。

01 GROUP-A.
05 SUB-A PICTURE X(5).
05 SUB-B .
10 ELEM-A PICTURE X(2).
[ 10 SLACK-BYTES PICTURE X. (コンパイラーが挿入) ]
10 ELEM-B USAGE BINARY PICTURE S9(6) SYNC.

3.12. USAGE節

USAGE節は、記憶領域に保存されるデータ項目の形式を指定します。レベル66、レベル88のデータ項目を除くすべてのデータ項目に指定することができます。DATE FORMAT節が指定されているデータ項目には、USAGE DISPLAYまたはCOMP-3のみ指定できます。

USAGE節がグループ項目に指定されている場合、そのグループに属する基本データ項目に適用されます。ただし、基本項目にUSAGEを指定する場合は、グループ項目に指定されたUSAGE節と矛盾してはなりません。USAGE節が指定されていない場合、暗黙的に次のようにUSAGE節が指定されたものとみなします。

– PICTURE文字列にG以外の記号が指定されている場合、USAGE DISPLAYが指定されたものとみなします。

figure dd usage
USAGE節の形式
計算用項目

計算用項目は、算出演算を処理するためのもので、数字カテゴリ項目である必要があります。

記号9、S、V、Pが使用可能な記号です。ただし、COMPUTATIONAL-1とCOMPUTATIONAL-2は、PICTURE文字列を指定することができません。

計算用項目の桁数は、最大31桁まで表現できます。

  • バイナリ

    • BINARY USAGEは、バイナリ・データ項目を表現します。負数は、同じ絶対値を持つ正数の2の補数法によって表現されます。

    • USAGE節に指定したBINARY、COMPUTATIONAL、COMP、COMPTATIONAL-4、COMP-4は、すべてバイナリ・データを表現する方法です。

    • バイナリ・データは、ビッグ・エンディアンです。符号付きバイナリ・データで、符号は左端ビットに含まれます。

    • バイナリ・データの記憶領域のサイズは、以下のようにPICTURE節の指定に基づいて決定されます。

      PICTURE節に指定された数字 記憶領域

      1 ~ 4

      2バイト

      5 ~ 9

      4バイト

      10 ~ 18

      8バイト

  • パック10進数

    • パック10進数項目を指定します。1バイトの中に2つの数字が保存され、最後のバイトの4ビット内には、符号が保存されます。

    • PACKED-DECIAML、Computational-3、COMP-3はパック10進数データを表現する方法です。

  • 浮動小数点

    • 単精度を持つ内部浮動小数点項目で、4バイトの記憶領域を占めます。

    • COMPUTATIONAL-1、COMP-1は、すべて内部浮動小数点データを表現する方法です。

  • 長精度浮動小数点

    • 長精度を持つ内部浮動小数点項目で、8バイトの記憶領域を占めます。

    • COMPUTATIONAL-2、COMP-2は、すべて長精度浮動小数点データを表現する方法です。

  • ネイティブ・バイナリ

    • USAGE COMP-5に指定された項目は、バイナリ・データと同様に記憶領域に表現されます。

      最大桁数は、USAGE COMPの場合のようにPICTURE文字列に指定された9の数に応じて決定されるのではなく、ネイティブ・バイナリが表現できる限界値に基づいて決定されます。

      COMP-5データに数字を保存する場合、切り捨ては、PICTURE節の指定に基づいて行われず、COMP-5データが表現できる最大値または最小値に応じて行われます。

      COMP-5データを参照するときは、ネイティブ・バイナリの表現単位(2、4、8バイト)で参照されます。

    • 以下は、PICTURE文字列の指定に応じて、記憶領域と保存できる最大値および最小値をまとめた表です。

      PICTURE 記憶領域 最大値または最小値

      S9(1) ~ S9(4)

      2バイト

      -32,768 ~ +32,768

      S9(5) ~ S9(9)

      4バイト

      -2,147,483,648 ~ +2,147,483,647

      S9(10) ~ S9(18)

      8バイト

      -9,223,372,036,775,808 ~ +9,223,372,036,775,807

      9(1) ~ 9(4)

      2バイト

      0 ~ 65535

      9(5) ~ 9(9)

      4バイト

      0 ~ 4,294,967,295

      9(10) ~ 9(18)

      8バイト

      0 ~ 18,446,744,073,709,551,615

    • COMP-5タイプは、主にCOBOLプログラム以外のプログラムとデータをやり取りするときに使用されます。バイト順は、プログラムが実行されているコンピュータのバイト順と同じです。

    • COMP-5データ項目で位取り因数を表現することができます。たとえば、PICTURE S99V99 COMP-5というデータがある場合、範囲は-327.68 ~ +327.67です。

DISPLAY句

DISPLAY句は、データを出力文字として使用するために、1文字を1バイトの記憶領域に保存します。

次のカテゴリ項目に対して、USAGE IS DISPLAYを指定することができます。

  • 英字

  • 英数字

  • 英数字編集

  • 数字編集

  • 外部浮動小数点

  • 外部10進数

    • 外部10進数項目はゾーン10進数項目とも呼ばれ、1つの数字は1バイトを占めます。各バイトの上位4ビットはゾーン・ビットであり、最下位バイトのゾーン・ビットは数字の符号を表します。各バイトの下位4ビットには数字を保存します。

    • 外部10進数項目は最大31桁の数字を表現することができます。

    • 外部10進数のPICTURE文字列には、9、S、V、Pのみを使用することができます。

DISPLAY-1句

以下は、DISPLAY-1句の設定規則です。

  • DISPLAY-1句は、DBCSデータ項目を保存するために指定します。

  • 1文字は、記憶領域の2バイトを占めます。

INDEX句

以下は、INDEX句の設定規則です。

  • INDEX句は指標データ項目を定義し、指標名の値を保存します。

  • 指標データ項目は、記憶領域の4バイトを占めます。

  • 指標データ項目の参照は、SEARCHステートメント、SETステートメント、リレーショナル条件、手続き部のUSING句、CALLステートメントまたはENTRYステートメントのUSING句によってのみ行うことができます。また、指標データ項目が英数字グループの下位項目である場合は、MOVEステートメントまたは入出力に関連するステートメントによって間接的に参照することができます。

  • USAGE IS INDEX句はどのレベルでも指定することができます。英数字グループ項目にINDEX句を指定した場合、そのグループ項目自体は指標データ項目ではないため、SEARCHステートメントまたはSETステートメント、またはリレーショナル条件を使用することができません。そのグループに属する基本項目が指標データ項目になりますが、基本項目にその項目が属するグループのUSAGE節と矛盾するUSAGE節を指定することはできません。

  • USAGE IS INDEX句は、DATE FORMAT、JUSTIFIED、PICTURE、BLANK WHEN ZERO、VALUE節で使用することができません。SYNCHRONIZED節は、指標データと一緒に使用することができます。

  • 指標データ項目を条件変数にすることはできません。

POINTER句

以下は、POINTER句の設定規則です。

  • POINTER句は、限定的な仮想ストレージをアドレスとして直接操作するためのポインター・データ項目を定義します。

  • ポインター・データ項目は、記憶領域の4バイトを占めます。

  • ポインター・データ項目の参照は、SEARCHステートメント、SETステートメント、リレーショナル条件、手続き部のUSING句、CALLステートメントまたはENTRYステートメントのUSING句によってのみ行うことができます。

  • USAGE IS POINTER句は、レベル88以外のどのレベルの項目にも指定することができます。USAGE IS POINTER句をグループ項目に指定した場合、グループ自体は英数字グループ項目で、グループに属する基本データ項目がポインター・データ項目になります。したがって、基本項目にその項目が属するグループのUSAGE節と矛盾するUSAGE節を指定することはできません。

  • ポインター・データ項目は、MOVEステートメントまたは入出力に関するステートメントで参照されるグループ項目に従属する項目として使用することができます。上記ステートメントの実行時に、データの変換は行われません。

  • ポインター・データ項目を条件変数にすることはできません。

  • USAGE IS POINTER句は、DATE FORMAT、JUSTIFIED、PICTURE、BLANK WHEN ZERO節と一緒に使用​​することができません。

  • ポインター・データ項目は、再定義される項目、または再定義する項目にすることができます。また、SYNCHRONIZED節と一緒に使用することもできます。ポインター・データ項目にVALUE節で指定できる値は、NULLまたはNULLSです。

  • ポインター・データ項目は、データを移動させるときに、CORRESPONDING句の処理対象から除外されます。

3.13. VALUE節

VALUE節は、データ項目の初期値または条件名の値を指定します。VALUE節の用途は、データ部のどのセクションに指定するかによって異なります。

VALUE節をLINKAGEセクションまたはFILEセクションのデータ項目に指定する場合は、条件名項目以外は、コンパイラー内部で構文チェックだけ行い、プログラムの実行には影響を与えません。

WORKING-STORAGEセクションまたはLOCAL-STORAGEセクションのデータ項目に指定されたVALUE節は、そのデータ項目の条件名項目で使用することも、初期値として使用することもできます。プログラムの実行初期に、VALUE節で指定した値が保存されます。VALUE節に値を指定していない場合は、プログラムの初期にそのデータ項目で使用される値を予測できません。

LINKAGEセクションに使用されたVALUE節の場合はコメントアウトされます。

形式1

形式1は、データ項目の初期値を指定します。

figure dd literal value
VALUE節の形式1:リテラル値
  • VALUE

    • SPACE、ZEROなどの表意定数は、その表意定数が意味する文字または数字で置き換えられます。

    • 数字項目に指定するVALUE値のリテラルは、数字である必要があります。WORKING-STORAGEまたはLOCAL-STORAGEの項目にVALUE値を指定する場合、指定したリテラル値は数値の移動の規則に従って位置合わせされます。また、ゼロ以外の数字を切り捨てる必要のあるリテラル値は指定することができません。リテラル値が符号付きである場合は、PICTURE文字列に符号記号を指定する必要があります。

    • VALUE値に指定する数値リテラルは、その項目のPICTURE節に指定した範囲内の数値である必要があります。

      たとえば、PICTURE 99PPPを指定した場合、1000から99000までの値をリテラル値として指定できます。ただし、COMP-5を使用して記述する場合、PICTURE節に記号Pを指定することはできません。

      また、PICTURE文字列に関係なく、ネイティブ・バイナリ表現の範囲までVALUE値を指定することができます。

    • USAGE DISPLAYが指定された英字、英数字、英数字編集、数字編集項目にVALUE値を指定する場合、指定可能なリテラル値は英数字リテラルまたは表意定数であり、指定した文字数は項目のサイズを超えてはなりません。

      指定したリテラル値の位置合わせは、英数字の位置合わせの規則に従って行われます。

    • 英数字グループにVALUE値を指定する場合、その値は英数字リテラルまたは表意定数である必要があり、指定した文字のサイズは、グループ項目のサイズを超えてはなりません。

    • DBCS項目にVALUE値を指定する場合、その値はDBCSリテラル、表意定数SPACE、または表意定数ALL DBCSリテラルである必要があります。また、指定した文字のサイズは、データ項目のサイズを超えてはなりません。

    • 内部浮動小数点項目のCOMP-1、COMP-2項目にVALUE値を指定する場合、その値は浮動小数点リテラル、表意定数ZERO、または整数および10進数形式のリテラル0である必要があります。

以下は、リテラル値の設定規則です。

  • 初期設定は、BLANK WHEN ZERO節またはJUSTIFIED節が指定されていても、影響を受けません。

  • OCCURS節が指定されているか、または表項目の副項目に形式1のVALUE節が指定されている場合、その表のすべての要素にVALUE節で指定した値が適用されます。

  • 初期値を決定する際には、PICTURE節の編集文字の機能は無視されます。ただし、項目のサイズを決定する際には、編集文字は計算に含まれます。つまり、PICTURE節に編集文字がある場合、リテラル値にそれを含める必要があります。たとえば、PIC +999.99というリテラルがあり、その値が+12.34である場合、VALUE節は、VALUE "+012.34"に指定する必要があります。

  • VALUE節は、EXTERNAL節またはREDEFINES節と一緒に指定してはならず、またそれらの節を持っているデータ記述項目の従属項目に指定することもできません。この規則は、条件名項目には適用されません。

  • 形式1のVALUE節は、英数字グループ項目、基本データ項目に指定することができます。VALUE節をグループ・レベルで指定する場合は、そのグループに属する基本データ項目のタイプに関係なく、同じ値で初期化が行われます。また、グループ項目にVALUE節を指定する場合は、そのグループに属している基本データ項目には、VALUE節を指定することができません。

  • JUSTIFIED節またはSYNCHRONIZED節が指定された従属項目を持つグループ項目には、VALUE節を指定してはなりません。

  • 英数字グループ項目にVALUE節を指定する場合、そのグループに属するすべての項目は、USAGE DISPLAYを明示的に指定するか、または暗黙的に指定されているとみなします。

VALUE節を外部浮動小数点項目に指定することはできません。

形式2

形式2は、リテラルで指定した1つの値、複数の値、または値の範囲を条件名に指定します。

figure dd condition name value
VALUE節の形式2:条件名の値

そのような条件名は、それぞれ別のレベル88の項目を指定する必要があります。

項目 説明

condition-name-1

条件変数に値を関連付けるユーザー定義名です。

関係付けられた条件変数が添え字や指標を必要とする場合、条件変数を参照するときと同様に、条件名を参照するときも添え字や指標を付けて参照する必要があります。

literal-1

条件名に関連付けられる単一の値です。

literal-1 through literal-2

条件名をliteral-1からliteral-2までの値に関連付けます。literal-1とliteral-2は、同じクラスである必要があります。literal-1は、literal-2より小さくなければなりません。

条件変数がDBCSの場合は、literal-1とliteral-2もDBCSリテラルである必要があり、表意定数SPACEまたは表意定数ALL DBCSリテラルを指定できます。

literal-1およびliteral-2がDBCSの場合、THROUGH句によって指定されるDBCS値の範囲は、16進数のDBCS値の2進照合シーケンスに従います。

以下は、条件名項目の設定規則です。

  • 条件名項目を指定するには、条件変数項目が先に指定されている必要があります。

    1つの条件変数に対して複数の条件名項目を指定する場合は、それぞれの条件名項目を連続して指定し、それぞれをピリオド(.)で区切る必要があります。

  • THRUは、THROUGHの省略形です。

  • 以下の場合を除いては、どの基本データ項目も条件変数として使用することができます。

    • 他の条件変数の条件名である場合

    • RENAMES節が指定された場合

    • USAGE INDEX、USAGE POINTER、USAGE PROCEDURE-POINTER、USAGE FUNCTION-POINTERが指定されている場合

  • 条件名は、グループ・レベル、またはグループの下位レベルに指定することができます。

  • 英数字グループ・データ記述項目に条件名を指定する場合、literal-1またはliteral-2は、英数字リテラルまたは表意定数を指定する必要があります。グループに属する項目に指定可能なUSAGEには制限がありません。

  • 英数字グループ・データ記述項目に条件名を指定する場合、指定した値のサイズは、グループ内のすべての項目のサイズの合計を超えてはなりません。また、そのグループ内どの項目にも、JUSTIFIED節またはSYNCHRONIZED節を指定してはなりません。

  • VALUE節にDBCSリテラルが指定されている場合、関連付ける条件名は同じクラスである必要があります。

形式3

形式3は、USAGE POINTER、USAGE PROCEDURE-POINTER、USAGE FUNCTION-POINTERとして定義された項目の初期値としてNULL値を指定します。

figure dd null value
VALUE節の形式3:NULL値