IDENTIFICATION DIVISION. PROGRAM-ID. FileOrgExt. *> 文件編成 拡張テスト *> Coverage: FO-A001 (STATUS 95), FO-A004 (編成不一致OPEN) *> FO-R001 (FILE STATUS 確認) ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *> 正常SEQUENTIAL文件 SELECT SEQ-FILE ASSIGN TO "SEQ.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS WS-FS1. *> 故意用INDEXED组织但写SEQUENTIAL方式(編成不一致) SELECT BAD-OPEN ASSIGN TO "BAD.DAT" ORGANIZATION IS INDEXED RECORD KEY IS BAD-KEY FILE STATUS IS WS-FS2. *> FILE STATUS驗證用 SELECT VSAM-FILE ASSIGN TO "VSAM.DAT" ORGANIZATION IS INDEXED RECORD KEY IS VSAM-KEY FILE STATUS IS WS-FS3. DATA DIVISION. FILE SECTION. FD SEQ-FILE RECORD CONTAINS 40 CHARACTERS. 01 SEQ-REC PIC X(40). FD BAD-OPEN RECORD CONTAINS 40 CHARACTERS. 01 BAD-REC. 05 BAD-KEY PIC X(10). 05 BAD-DATA PIC X(30). FD VSAM-FILE RECORD CONTAINS 40 CHARACTERS. 01 VSAM-REC. 05 VSAM-KEY PIC X(10). 05 VSAM-DATA PIC X(30). WORKING-STORAGE SECTION. 01 WS-FS1 PIC X(2). 01 WS-FS2 PIC X(2). 01 WS-FS3 PIC X(2). 01 WS-PASS PIC 9(2) VALUE 0. 01 WS-FAIL PIC 9(2) VALUE 0. PROCEDURE DIVISION. MAIN. DISPLAY "FILE-ORG-EXT: Starting file organization tests" *> FO-R001: FILE STATUS 基本確認 DISPLAY "FO-R001: Basic FILE STATUS check" OPEN OUTPUT SEQ-FILE. IF WS-FS1 = "00" ADD 1 TO WS-PASS DISPLAY "FO-R001: OPEN OUTPUT STATUS=00 PASS" ELSE ADD 1 TO WS-FAIL DISPLAY "FO-R001: OPEN STATUS=" WS-FS1 END-IF. CLOSE SEQ-FILE. *> FO-A004: 編成不一致OPEN *> SEQUENTIAL文件作为INDEXED打开→STATUS非0 DISPLAY "FO-A004: Organization mismatch OPEN" OPEN INPUT BAD-OPEN. IF WS-FS2 NOT = "00" AND WS-FS2 NOT = "05" ADD 1 TO WS-PASS DISPLAY "FO-A004: PASS - STATUS=" WS-FS2 " (expected non-zero)" ELSE ADD 1 TO WS-FAIL DISPLAY "FO-A004: FAIL - unexpected STATUS=" WS-FS2 END-IF. CLOSE BAD-OPEN. *> FO-A001: STATUS 95 (文件状態不一致) *> INDEXED文件作為INPUT打開但文件不存在 DISPLAY "FO-A001: FILE STATUS 95 test" OPEN INPUT VSAM-FILE. DISPLAY "FO-A001: OPEN STATUS=" WS-FS3 IF WS-FS3 = "35" OR WS-FS3 = "05" ADD 1 TO WS-PASS DISPLAY "FO-A001: PASS - STATUS=" WS-FS3 " (file not found expected)" ELSE ADD 1 TO WS-FAIL DISPLAY "FO-A001: FAIL - STATUS=" WS-FS3 END-IF. CLOSE VSAM-FILE. *> FO-N005: LINE SEQUENTIAL 読書 DISPLAY "FO-N005: LINE SEQUENTIAL test" OPEN OUTPUT SEQ-FILE. MOVE "LINE-SEQUENTIAL-TEST-RECORD-01" TO SEQ-REC. WRITE SEQ-REC. CLOSE SEQ-FILE. OPEN INPUT SEQ-FILE. READ SEQ-FILE INTO SEQ-REC AT END ADD 1 TO WS-FAIL DISPLAY "FO-N005: FAIL - empty read" NOT AT END ADD 1 TO WS-PASS DISPLAY "FO-N005: PASS - LINE SEQ read OK" END-READ. CLOSE SEQ-FILE. DISPLAY " " DISPLAY "FILE-ORG-EXT: PASS=" WS-PASS " FAIL=" WS-FAIL IF WS-FAIL = 0 DISPLAY "FILE-ORG-EXT: ALL PASSED" STOP RUN RETURNING 0 ELSE DISPLAY "FILE-ORG-EXT: FAILED" STOP RUN RETURNING 1 END-IF . END PROGRAM FileOrgExt.