*> ============================================================ *> main-divide-50 : 请求书50分割 (Invoice 50-Split) *> Input : FILE-IN (INPUT.DAT: 请求书记录) *> Output: FILE-OUT (OUTPUT.DAT: 50件毎分割) *> Coverage: S-N001~N003, S-N006, S-N007, S-R001, S-R002 *> ============================================================ IDENTIFICATION DIVISION. PROGRAM-ID. DIVIDE-50. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-IN ASSIGN TO "INPUT.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS WS-FS. SELECT FILE-OUT ASSIGN TO "OUTPUT.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FILE-IN RECORD CONTAINS 40 CHARACTERS. 01 IN-REC. 05 IN-KEY PIC X(10). 05 IN-DATA PIC X(20). 05 IN-AMT PIC 9(10). FD FILE-OUT RECORD CONTAINS 40 CHARACTERS. 01 OUT-REC PIC X(40). WORKING-STORAGE SECTION. 01 WS-FS PIC X(2). 01 WS-EOF PIC X(1) VALUE 'N'. 88 WS-EOF-Y VALUE 'Y' FALSE 'N'. 01 WS-COUNT PIC 9(10). 01 WS-FILE-NUM PIC 9(2). 01 WS-FILE-NAME PIC X(20). 01 WS-TOTAL-IN PIC 9(10). 01 WS-TOTAL-OUT PIC 9(10). 01 WS-SPLIT-LIMIT PIC 9(5) VALUE 50. 01 WS-INVOICE-REC. COPY "telecom/TEL-INVOICE.cpy". PROCEDURE DIVISION. MAIN. DISPLAY "DIVIDE-50: Starting 50-split processing" DISPLAY "SPLIT LIMIT: " WS-SPLIT-LIMIT " records per file" OPEN INPUT FILE-IN. IF WS-FS NOT = "00" DISPLAY "OPEN FAIL: " WS-FS STOP RUN RETURNING 1 END-IF. MOVE 1 TO WS-FILE-NUM. MOVE 0 TO WS-COUNT. MOVE 0 TO WS-TOTAL-IN. PERFORM OPEN-NEXT-OUTPUT. PERFORM UNTIL WS-EOF-Y READ FILE-IN INTO IN-REC AT END SET WS-EOF-Y TO TRUE NOT AT END ADD 1 TO WS-TOTAL-IN ADD 1 TO WS-COUNT MOVE IN-REC TO OUT-REC WRITE OUT-REC ADD 1 TO WS-TOTAL-OUT IF WS-COUNT >= WS-SPLIT-LIMIT CLOSE FILE-OUT ADD 1 TO WS-FILE-NUM MOVE 0 TO WS-COUNT PERFORM OPEN-NEXT-OUTPUT END-IF END-READ END-PERFORM. CLOSE FILE-IN FILE-OUT. DISPLAY "DIVIDE-50: Input=" WS-TOTAL-IN " Output-total=" WS-TOTAL-OUT " Files-created=" WS-FILE-NUM IF WS-TOTAL-IN = WS-TOTAL-OUT DISPLAY "DIVIDE-50: PASS - record count match" STOP RUN RETURNING 0 ELSE DISPLAY "DIVIDE-50: FAIL - count mismatch" STOP RUN RETURNING 1 END-IF . OPEN-NEXT-OUTPUT. STRING "SPLIT-" WS-FILE-NUM ".DAT" DELIMITED BY SIZE INTO WS-FILE-NAME END-STRING CLOSE FILE-OUT OPEN OUTPUT FILE-OUT DISPLAY "DIVIDE-50: Opening " WS-FILE-NAME . END PROGRAM DIVIDE-50.