1-1.Pro*COBOL使用例
******************************************************************
* Pro*COBOLを勉強しないといけないです。 *
******************************************************************
*A===B===========================================================R
* 【見直し部】
* 見出し部はCOBOLプログラムを識別するための部で、見出し部のみ節はありません。
* PROGRAM-IDには作成するプログラム名などの情報を記述します。
*A===B===========================================================R
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST_PCO.
*A===B===========================================================R
* 【環境部】
* 環境部はプログラムを適用するコンピュータ名や、
* 環境変数などの情報の定義を行う構成節(CONFIGURATION SECTION)と、
* プログラムファイルを使用する場合に記述する入出力節(INPUT-OUTPUT SECTION)があります。
*A===B===========================================================R
ENVIRONMENT DIVISION.
* 構成セクション
CONFIGURATION SECTION.
*A===B===========================================================R
* 【データ部】
* データ部はファイル節(FILE SECTION)
* 作業場所節(WORKNG-STORAGE SECTION)
* 連絡節(LINKAGE SECTION)
* 通信節(COMMUNICATION SECTION)などから構成されます。
* 主にプログラムで使用するデータ項目やファイルのレコードの宣言を行います。
*A===B===========================================================R
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORK-AREA.
03 WORK-GROUP-1.
05 WORK-NUM PIC 9(3).
05 WORK-SUM PIC 9(3).
03 WORK-GROUP-2.
05 WORK-NUM1 PIC 9(3).
05 WORK-NUM2 PIC 9(3).
05 WORK-SUM2 PIC 9(3).
*A===B===========================================================R
* 【手続き部】
* 手続き部では主に各種処理を宣言したり、
* 実行される手続きやエラーになった場合の処理内容を記述します。
* また、STOP文を記述すれば、プログラムを終了することができます。
*A===B===========================================================R
PROCEDURE DIVISION.
MAIN SECTION.
* 結果を出力する
DISPLAY "Hello, Pro*COBOL!".
STOP RUN.
1-2.DISPLAY文
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY_INPUT_SAMPLE02.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUT-RECORD.
03 IN-DATA-NUM PIC X(3).
03 IN-DATA-STR PIC X(9).
PROCEDURE DIVISION.
MAIN.
*>----------------------------------------------------
*> コンソールに入力
*>----------------------------------------------------
DISPLAY "数値を入力してください。>> " WITH NO ADVANCING.
ACCEPT IN-DATA-NUM FROM CONSOLE.
*>----------------------------------------------------
*> 入力した値が数値か判定する
*>----------------------------------------------------
IF IN-DATA-NUM IS NUMERIC THEN
DISPLAY "IN-DATA-NUM = "IN-DATA-NUM UPON CONSOLE
ELSE
DISPLAY "数値以外が入力されました。"
END-IF.
*>----------------------------------------------------
*> 環境変数から入力
*>----------------------------------------------------
ACCEPT IN-DATA-STR FROM DATE.
*>----------------------------------------------------
*> 入力した値が数値か判定する
*>----------------------------------------------------
IF IN-DATA-STR IS NUMERIC THEN
DISPLAY "IN-DATA-STR = "IN-DATA-STR UPON CONSOLE
ELSE
DISPLAY "数値以外が入力されました。["IN-DATA-STR"]"
END-IF.
STOP RUN.
1-3.MOVE文
IDENTIFICATION DIVISION.
PROGRAM-ID. MOVE_SAMPLE04.
*>文字列を扱う定数を定義する
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEST-MOVE1 PIC x(3).
01 TEST-MOVE2 PIC x(3).
01 TEST-MOVE3 PIC x(3).
01 TEST-MOVE4 PIC x(3).
01 TEST-MOVE5 PIC x(3).
01 TEST-MOVE_NUM1 PIC 9(2).
01 TEST-MOVE_NUM2 PIC 9(2).
01 TEST-MOVE_NUM3 PIC 9(2).
01 TEST-MOVE_NUM4 PIC 9(2).
01 TEST-MOVE_NUM5 PIC 9(2).
*
PROCEDURE DIVISION.
MAIN SECTION.
*>項目TEST-MOVE1に文字列を設定
MOVE "ABC" TO TEST-MOVE1.
*>それぞれの項目にTEST-MOVE1の値を転記する
MOVE TEST-MOVE1 TO TEST-MOVE2 TEST-MOVE3
TEST-MOVE4 TEST-MOVE5.
*>項目TEST-MOVE_NUM1に数値を設定
MOVE 3 TO TEST-MOVE_NUM1.
*>それぞれの項目にTEST_MOVE_NUM1の値を転記する
MOVE TEST-MOVE_NUM1 TO TEST-MOVE_NUM2 TEST-MOVE_NUM3
TEST-MOVE_NUM4 TEST-MOVE_NUM5.
*>結果を出力
DISPLAY "["TEST-MOVE2 TEST-MOVE3 TEST-MOVE4 TEST-MOVE5"]".
* UPON CONSOLE.
DISPLAY "["TEST-MOVE_NUM2 TEST-MOVE_NUM3 TEST-MOVE_NUM4
TEST-MOVE_NUM5"]" UPON CONSOLE.
STOP RUN.
1-4.SUBTRACT関数
******************************************************************
* ここでは、減算した結果を出力するプログラムを作成してみましょう *
* 値を減算するにはSUBTRACT文を使用します。
* SUBTRACT文は以下のように記述します。
* 「SUBTRACT 減算する項目 FROM 減算対象項目.」
* 「減算対象項目 = 減算対象項目 – 減算する項目」となります。
******************************************************************
*A===B===========================================================R
* 【見直し部】
* 見出し部はCOBOLプログラムを識別するための部で、見出し部のみ節はありません。
* PROGRAM-IDには作成するプログラム名などの情報を記述します。
*A===B===========================================================R
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTRACT_SAMPLE.
*A===B===========================================================R
* 【環境部】
* 環境部はプログラムを適用するコンピュータ名や、
* 環境変数などの情報の定義を行う構成節(CONFIGURATION SECTION)と、
* プログラムファイルを使用する場合に記述する入出力節(INPUT-OUTPUT SECTION)があります。
*A===B===========================================================R
ENVIRONMENT DIVISION.
* 構成セクション
CONFIGURATION SECTION.
*A===B===========================================================R
* 【データ部】
* データ部はファイル節(FILE SECTION)
* 作業場所節(WORKNG-STORAGE SECTION)
* 連絡節(LINKAGE SECTION)
* 通信節(COMMUNICATION SECTION)などから構成されます。
* 主にプログラムで使用するデータ項目やファイルのレコードの宣言を行います。
*A===B===========================================================R
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORK-AREA.
03 WORK-GROUP-1.
05 WORK-NUM PIC 9(3).
05 WORK-SUM PIC 9(3).
03 WORK-GROUP-2.
05 WORK-NUM1 PIC 9(3).
05 WORK-NUM2 PIC 9(3).
05 WORK-SUM2 PIC 9(3).
*A===B===========================================================R
* 【手続き部】
* 手続き部では主に各種処理を宣言したり、
* 実行される手続きやエラーになった場合の処理内容を記述します。
* また、STOP文を記述すれば、プログラムを終了することができます。
*A===B===========================================================R
PROCEDURE DIVISION.
MAIN SECTION.
* 値を設定する
MOVE 100 TO WORK-NUM.
MOVE 300 TO WORK-SUM.
* WORK-SUMに減算した結果を保存する
SUBTRACT WORK-NUM FROM WORK-SUM.
* 結果を出力する
DISPLAY "結果①: "WORK-SUM.
* COMPUTE「-」で減算
COMPUTE WORK-SUM = WORK-SUM - WORK-NUM.
* 結果を出力する
DISPLAY "結果②: "WORK-SUM.
*-----------------------------------------------------------------
* 値を設定する
MOVE 100 TO WORK-NUM1.
MOVE 200 TO WORK-NUM2.
* ADDで加算
ADD WORK-NUM1 WORK-NUM2 TO WORK-SUM2.
* 結果を出力する
DISPLAY "結果③: "WORK-SUM2.
STOP RUN.
1-5.IF文で単一分岐処理
IDENTIFICATION DIVISION.
PROGRAM-ID. QBDCOB05_IF.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WORKING-AREA.
* コンソール入力バッファ
03 CONSOLE-INPUT PIC X(1).
PROCEDURE DIVISION.
*-------------------------------------------
* 主手続
*-------------------------------------------
MAIN-PROCEDURE.
* コンソール入力エリアの初期化
MOVE SPACE TO CONSOLE-INPUT.
EXEC-DISPLAY-INPUT-PROC.
* コンソール表示&入力
DISPLAY "数字を1文字入力してください".
DISPLAY "0-8:CONTINUE 9:EXIT".
ACCEPT CONSOLE-INPUT FROM CONSOLE.
* 9以外が入力された場合、コンソール表示&入力を繰り返す
IF (CONSOLE-INPUT >= 1) AND
(CONSOLE-INPUT <= 8) THEN
GO TO EXEC-DISPLAY-INPUT-PROC
ELSE IF (CONSOLE-INPUT = 9) THEN
DISPLAY "プログラムを終了します"
ELSE
DISPLAY "1から9までの数字を入力してください"
GO TO EXEC-DISPLAY-INPUT-PROC
END-IF
END-IF.
STOP RUN.
1-6.EVALUATE文で多分岐処理
IDENTIFICATION DIVISION.
PROGRAM-ID. QBDCOB06_EVALUATE.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WORKING-AREA.
* コンソール入力バッファ
03 CONSOLE-INPUT PIC X(1).
*>----------------------------------------------------
*> 主手続
*>----------------------------------------------------
PROCEDURE DIVISION.
MAIN-PROCEDURE.
* コンソール入力エリアの初期化
MOVE SPACE TO CONSOLE-INPUT.
EXEC-DISPLAY-INPUT-PROC.
* コンソール表示&入力
DISPLAY "数字を1文字入力してください".
DISPLAY "0-8:CONTINUE 9:EXIT".
ACCEPT CONSOLE-INPUT FROM CONSOLE.
* 9以外が入力された場合、コンソール表示&入力を繰り返す
EVALUATE CONSOLE-INPUT
WHEN 0 THRU 8
GO TO EXEC-DISPLAY-INPUT-PROC
WHEN 9
DISPLAY "プログラムを終了します"
WHEN OTHER
DISPLAY "0から9までの数字を入力してください"
GO TO EXEC-DISPLAY-INPUT-PROC
END-EVALUATE.
STOP RUN.
1-7.UNTIL文
**********************************************
* COBOLプログラムの作成
***********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID.loop.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9(2).
01 CNT PIC 9(2).
PROCEDURE DIVISION.
MAIN.
MOVE 0 TO I
MOVE 0 TO CNT
PERFORM UNTIL I >= 10
ADD 1 TO I
ADD I TO CNT
DISPLAY "I=" I ", CNT=" CNT
END-PERFORM.
DISPLAY "CNT=" CNT
STOP RUN.
END PROGRAM loop.
1-8.CALCULATION文
**********************************************
* COBOLプログラムの作成
***********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. QBDCOB07_CALCULATION.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*>----------------------------------------------------
*> 数値項目を定義
*>----------------------------------------------------
01 SAMPLE-DATA.
*>整数4桁、小数点以下5桁
03 NUM-A PIC 9(4)V9(5) VALUE 1111.12345.
*>整数2桁、小数点以下5桁
03 NUM-B PIC 9(2)V9(5) VALUE 10.11356.
03 SUM-DATA PIC 9(5)V9(5).
PROCEDURE DIVISION.
MAIN.
*>----------------------------------------------------
*> 計算処理(COMPUTE)
*>----------------------------------------------------
*> 加算
COMPUTE SUM-DATA = NUM-A + NUM-B.
DISPLAY "加算結果:"SUM-DATA.
*> 減算
COMPUTE SUM-DATA = NUM-A - NUM-B.
DISPLAY "減算結果:"SUM-DATA.
*> 乗算
COMPUTE SUM-DATA = NUM-A * NUM-B.
DISPLAY "乗算結果:"SUM-DATA.
*> 除算
COMPUTE SUM-DATA = NUM-A / NUM-B.
DISPLAY "除算結果:"SUM-DATA.
*===========================================================
*ADD文は「SUM-DATA = NUM-A + NUM-B」
*SUBTRACT文は「SUM-DATA = NUM-A ? NUM-C」
*MULTIPLY文は「SUM-DATA = NUM-A * NUM-B」
*DIVIDE文は「SUM-DATA = NUM-A / NUM-C」
*===========================================================
STOP RUN.
1-9.SORT文
**********************************************
* COBOLプログラムの作成
***********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. QBDCOB09_SORT.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* 商品ファイル (入力ファイル)
SELECT IN-FILE ASSIGN TO "dat/SHOHIN.txt"
ORGANIZATION IS LINE SEQUENTIAL.
* 整列併合用ファイル (中間ファイル)
SELECT ST-FILE ASSIGN TO "dat/ST01".
* ソート後商品ファイル (出力ファイル)
SELECT OUT-FILE ASSIGN TO "dat/SHOHIN-SORT.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
* 商品ファイル (入力ファイル)
FD IN-FILE.
01 IN-REC.
03 IN-SHOHIN-CODE PIC 9(003).
03 IN-SHOHIN-MEI PIC X(010).
03 IN-SHOHIN-KAKAKU PIC 9(004).
* 整列併合用ファイル (中間ファイル)
SD ST-FILE.
01 ST-REC.
03 ST-SHOHIN-CODE PIC 9(003).
03 ST-SHOHIN-MEI PIC X(010).
03 ST-SHOHIN-KAKAKU PIC 9(004).
* ソート後商品ファイル (出力ファイル)
FD OUT-FILE.
01 OUT-REC.
03 OUT-SHOHIN-CODE PIC 9(003).
03 OUT-SHOHIN-MEI PIC X(010).
03 OUT-SHOHIN-KAKAKU PIC 9(004).
*-------------------------------------------
* 主手続
*-------------------------------------------
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "ソート処理を開始します".
SORT ST-FILE
ON ASCENDING KEY ST-SHOHIN-CODE
USING IN-FILE
GIVING OUT-FILE.
DISPLAY "ソート処理が終了しました".
STOP RUN.
1-10.SEQUENTIALFILE文
**********************************************
* COBOLプログラムの作成
***********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. QBDCOB10_SEQUENTIALFILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*>------------------------------
*> ファイルを指定する
*>------------------------------
SELECT SAMPLE-FILE ASSIGN TO 'sample.txt'
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS IN-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD SAMPLE-FILE.
01 OUT-FILE-REC PIC X(50).
01 IN-FILE-REC PIC X(50).
WORKING-STORAGE SECTION.
01 IN-FILE-STATUS PIC X(02).
01 ITEM PIC X(50).
PROCEDURE DIVISION.
*>------------------------------
*> ファイルの書き込み
*>------------------------------
OPEN OUTPUT SAMPLE-FILE.
DISPLAY "レコードの書き込み";
PERFORM UNTIL ITEM = "99"
DISPLAY "レコードを入力してください(終了:99)。>> "
WITH NO ADVANCING ACCEPT ITEM
IF ITEM NOT= "99" THEN
MOVE ITEM TO OUT-FILE-REC
WRITE OUT-FILE-REC
DISPLAY "WRITE: "OUT-FILE-REC
END-IF
END-PERFORM.
CLOSE SAMPLE-FILE.
*>------------------------------
*> ファイルの読み込み
*>------------------------------
OPEN INPUT SAMPLE-FILE.
DISPLAY "レコードの読み込み";
*>1レコードずつ読み込む
PERFORM UNTIL IN-FILE-STATUS NOT = "00"
READ SAMPLE-FILE
AT END
DISPLAY "READ END";
NOT AT END
DISPLAY "READ: "IN-FILE-REC
END-READ
END-PERFORM.
CLOSE SAMPLE-FILE.
STOP RUN.