COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
COBOL(コボル)言語の予約語INITIALIZEを使った命令文の書き方とは
COBOL(コボル)言語のINITIALIZE文とは?
COBOL(コボル)におけるINITIALIZE文は、データ項目を初期化するときに使用する命令文です。初期化対象のデータ項目を指定すると、基本項目を初期化することができます。
基本書式は、数値型のデータ項目は0で初期化し、文字列などの英数字型のデータ項目はスペースで初期化します。
基本的には出力するデータレコードを編集する前に、レコードの内容をまとめて初期化するときに使うのが一般的です。
本記事では、INITIALIZE文の基本的な使い方やルール、注意点などをご紹介します。
書き方1:(データ項目の内容を初期化する)
INITIALIZE [初期化項目].
INITIALIZE使い方はとてもシンプルです。INITIALIZEの後に初期化する項目を指定するだけで、項目を初期化することができます。
以下にデータ項目を初期化する基本的な方法を紹介します。
使用例1:
実行結果1:
サンプルでは英数字型のデータ項目TEST-STRを定義し、英数字の項目をMOVE文を使用して文字列"ABC"を転記しています。
次にINITIALIZE文でデータ項目TEST-STRを指定し、初期化しています。
DISPLAYで実行結果を確認すると、データが空白で初期化されているのがわかります。
書き方2:(データ項目の内容を複数初期化する)
INITIALIZE [初期化項目1] [初期化項目2] [初期化項目n...].
INITIALIZE文は、データ項目を複数指定して一括でデータを初期化することが可能です。
以下に複数のデータ項目を指定して、初期化する方法を紹介します。
使用例2:
実行結果2:
サンプルでは英数字型のデータ項目TEST-STRと数値型のデータ項目TEST-NUM文を定義して、MOVE文で文字列"ABC"と数値の1を転記しています。
次にINITIALIZE文でデータ項目TEST-STRとTEST-NUMを連続して指定しています。
DISPLAYで実行結果を確認すると、英数字型のデータは空白、数値型は0で初期化されていることがわかります。
REPLACINGを使用した初期化方法
REPLACING句を使用すると、初期化用の値を種類に応じた定数やデータ項目を指定することができます。
書き方:(REPLACINGを指定した初期化)
INITIALIZE [初期化項目1] [初期化項目2...] REPLACING 種類 DATA BY 値.
REPLACINGで指定する種類一覧
種類 |
種類 |
ALPHABETIC |
英字項目(Aタイプ) |
ALPHANUMERIC |
英数字項目(Xタイプ) |
NUMERIC |
数値(9タイプ) |
ALPHANUMERIC-EDITED |
英数字編集項目(XXX/XX/XXなど) |
NUMERIC-EDITED |
数値編集項目(ZZZ.ZZ9など) |
NATIONAL |
日本語項目(Nタイプ) |
NATIONAL-EDITED |
日本語編集項目(NN9-129-12など |
以下にREPLACINGを使用した、INITIALIZEの初期化方法を記述します。
使用例
実行結果
サンプルでは数値型のデータ項目TEST-NUM1、TEST-NUM2を定義し、MOVE文でそれぞれ値を転記しています。
次にINITIALIZE文で数値型変数に対して、REPLACINGでNUMERIC(9タイプ)を指定し、初期化用の値に5を指定します。
DISPLAYで実行結果を確認すると、5で初期化されていることがわかります。
INITIALIZE文のCOBOL(コボル)言語における基本事項やルールについて
- 初期化項目の値は数値型定数、文字定数、データ項目などを記述します。
- REPLACING指定に記述する種類は、初期化項目の型と同じでなければいけません。
- 同じ種類をREPLACING指定で繰り返し記述してはいけません。
- 初期化項目にOCCURS句のDEPENDING指定を含んではいけません。
- 初期化項目にRENAMES句を含んではいけません。
COBOL(コボル)言語のINITIALIZE文を扱う上での注意点
INITIALIZE文でREPLACINGを使用する場合は、基本事項やルールで記述しているように、初期化するデータ項目と、REPLACINGで指定する種類は、同じ型でなければいけません。
例えば、英数字型の項目を定義し、REPLACINGで数値型のNUMERIC(9タイプ)を指定してみます。
実行結果:
サンプルでは英数字型の項目を定義し、値を設定後にINITIALIZE文でREPLACINGのNUMERIC(9タイプ)を指定しています。
しかし、初期化する項目の型が英数字で、初期化で指定する値の型が数値型のため、初期化が失敗して値はそのままとなっています。
MOVE文同様に型が異なると、意図した処理を実行しませんので注意が必要です。
INITIALIZE文を使ったCOBOL(コボル)プログラムの活用法
データ項目を初期化するのに便利なINITIALIZE文ですが、データ項目をまとめて初期化したい場合があります。
そんなときは、集団項目を指定すれば集団項目配下のデータ項目を、一括して初期化することができます。
以下にINITIALIZE文で集団項目を指定して、一括で初期化するプログラムを紹介します。
- *> INITIALIZE_SAMPLE04
- IDENTIFICATION DIVISION.
- PROGRAM-ID. INITIALIZE_SAMPLE05.
- *>文字列と数字を扱うデータ項目を定義する
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- 01 TEST-WORK-AREA.
- 05 TEST-STR1 PIC x(3).
- 05 TEST-STR2 PIC x(3).
- 05 TEST-NUM1 PIC 9(2).
- 05 TEST-NUM2 PIC 9(2).
- PROCEDURE DIVISION.
- MAIN SECTION.
- *>項目に数値を設定
- MOVE "ABC" TO TEST-STR1.
- MOVE "CDF" TO TEST-STR2.
- MOVE 1 TO TEST-NUM1.
- MOVE 2 TO TEST-NUM2.
- INITIALIZE TEST-WORK-AREA
- *>初期化後の結果を出力
- DISPLAY "[TEST-STR1 : "TEST-STR1"]" UPON CONSOLE.
- DISPLAY "[TEST-STR2 : "TEST-STR2"]" UPON CONSOLE.
- DISPLAY "[TEST-NUM1 : "TEST-NUM1"]" UPON CONSOLE.
- DISPLAY "[TEST-NUM2 : "TEST-NUM2"]" UPON CONSOLE.
- STOP RUN.
実行結果:
サンプルでは集合項目TEST-WORK-AREAを定義し、その配下に英数字型と数値型のデータ項目を定義しています。
次に英数字型と数値型のデータ項目にMOVE文で値を転記したあとに、INITIALIZE文で集合項目TEST-WORK-AREAを指定しています。
実行結果を確認すると、集合項目配下のデータ項目が全て初期化されていることがわかります。
この記事を読んだ人は、こちらの記事も読んでいます
【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集
COBOL入門のカテゴリー