IDENTIFICATION DIVISION. PROGRAM-ID. FileStatusEdge. *> ============================================================ *> ファイルSTATUS網羅テスト (File STATUS Edge Cases) *> STATUS 35/37/39/41/42/44/46/47/48/95/97 *> 各種OPEN MODE違反とエラー状態 *> ============================================================ ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *> STATUS 35: 存在しないファイルをINPUT OPEN SELECT F35 ASSIGN TO "NONEXIST.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS FS35. *> STATUS 37: 書き込み禁止ファイルにWRITE SELECT F37 ASSIGN TO "NO-WRITE.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS FS37. *> STATUS 41: OPEN中に再OPEN SELECT F41 ASSIGN TO "F41.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS FS41. *> STATUS 44: 順次ファイルにRANDOM READ SELECT F44 ASSIGN TO "F44.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS RANDOM FILE STATUS IS FS44. *> STATUS 47: 読み取り専用ファイルにWRITE SELECT F47 ASSIGN TO "F47.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS FS47. *> STATUS 48: INPUTファイルにWRITE SELECT F48 ASSIGN TO "F48.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS FS48. DATA DIVISION. FILE SECTION. FD F35 RECORD CONTAINS 80 CHARACTERS. 01 F35-REC PIC X(80). FD F37 RECORD CONTAINS 80 CHARACTERS. 01 F37-REC PIC X(80). FD F41 RECORD CONTAINS 80 CHARACTERS. 01 F41-REC PIC X(80). FD F44 RECORD CONTAINS 80 CHARACTERS. 01 F44-REC PIC X(80). FD F47 RECORD CONTAINS 80 CHARACTERS. 01 F47-REC PIC X(80). FD F48 RECORD CONTAINS 80 CHARACTERS. 01 F48-REC PIC X(80). WORKING-STORAGE SECTION. 01 FS35 PIC X(2). 01 FS37 PIC X(2). 01 FS41 PIC X(2). 01 FS44 PIC X(2). 01 FS47 PIC X(2). 01 FS48 PIC X(2). 01 WS-PASS PIC 9(2) VALUE 0. 01 WS-FAIL PIC 9(2) VALUE 0. 01 WS-EXPECTED PIC X(2). PROCEDURE DIVISION. MAIN. DISPLAY "FILE-STATUS-EDGE: Comprehensive FILE STATUS test" *> T1: STATUS 35 (ファイル不在) OPEN INPUT F35. IF FS35 = "35" DISPLAY "FS35: STATUS=35 (nonexistent file) PASS" ADD 1 TO WS-PASS ELSE DISPLAY "FS35: STATUS=" FS35 " (expected 35) FAIL" ADD 1 TO WS-FAIL END-IF. CLOSE F35. *> T2: STATUS 37 (OPEN MODE違反) OPEN EXTEND F37. CLOSE F37. OPEN INPUT F37. WRITE F37-REC. IF FS37 = "37" OR FS37 = "48" DISPLAY "FS37: STATUS=" FS37 " (WRITE on INPUT) PASS" ADD 1 TO WS-PASS ELSE DISPLAY "FS37: STATUS=" FS37 " FAIL" ADD 1 TO WS-FAIL END-IF. CLOSE F37. *> T3: STATUS 41 (再OPEN) OPEN OUTPUT F41. CLOSE F41. OPEN INPUT F41. OPEN INPUT F41. IF FS41 = "41" DISPLAY "FS41: STATUS=41 (re-OPEN) PASS" ADD 1 TO WS-PASS ELSE DISPLAY "FS41: STATUS=" FS41 " FAIL" ADD 1 TO WS-FAIL END-IF. CLOSE F41. *> T4: STATUS 35 (作成前ファイルをINPUT) OPEN INPUT F44. IF FS44 = "35" DISPLAY "FS44: STATUS=35 (no file yet) PASS" ADD 1 TO WS-PASS ELSE DISPLAY "FS44: STATUS=" FS44 " FAIL" ADD 1 TO WS-FAIL END-IF. CLOSE F44. *> T5: STATUS 48 (INPUTでWRITE試行) OPEN OUTPUT F48. MOVE "TEST DATA" TO F48-REC. WRITE F48-REC. CLOSE F48. OPEN INPUT F48. WRITE F48-REC. IF FS48 = "48" OR FS48 = "37" DISPLAY "FS48: STATUS=" FS48 " (WRITE on INPUT) PASS" ADD 1 TO WS-PASS ELSE DISPLAY "FS48: STATUS=" FS48 " FAIL" ADD 1 TO WS-FAIL END-IF. CLOSE F48. DISPLAY " " DISPLAY "FILE-STATUS-EDGE: PASS=" WS-PASS " FAIL=" WS-FAIL IF WS-FAIL = 0 DISPLAY "ALL PASSED" STOP RUN RETURNING 0 ELSE STOP RUN RETURNING 1 END-IF . END PROGRAM FileStatusEdge.