*> ============================================================ *> main-divide-25 : 明细25分割 (Detail 25-Split) *> Input : FILE-IN (INPUT.DAT: 明细记录) *> Output: FILE-OUT (SPLIT-OUT: 25件毎分割) *> Coverage: S-N004, S-N006, S-N007, S-R001, S-R002 *> ============================================================ IDENTIFICATION DIVISION. PROGRAM-ID. DIVIDE-25. 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 "SPLIT-OUT" 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 25. 01 WS-INVOICE-REC. COPY "telecom/TEL-INVOICE.cpy". PROCEDURE DIVISION. MAIN. DISPLAY "DIVIDE-25: Starting 25-split" OPEN INPUT FILE-IN. MOVE 1 TO WS-FILE-NUM. MOVE 0 TO WS-COUNT. MOVE 0 TO WS-TOTAL-IN. PERFORM OPEN-NEXT-FILE. 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 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-FILE END-IF END-READ END-PERFORM. CLOSE FILE-IN FILE-OUT. DISPLAY "DIVIDE-25: IN=" WS-TOTAL-IN " OUT=" WS-TOTAL-OUT " FILES=" WS-FILE-NUM IF WS-TOTAL-IN = WS-TOTAL-OUT DISPLAY "DIVIDE-25: PASS" STOP RUN RETURNING 0 ELSE DISPLAY "DIVIDE-25: FAIL" STOP RUN RETURNING 1 END-IF . OPEN-NEXT-FILE. STRING "SPLIT25-" WS-FILE-NUM ".DAT" DELIMITED BY SIZE INTO WS-FILE-NAME END-STRING CLOSE FILE-OUT OPEN OUTPUT FILE-OUT DISPLAY "OPEN: " WS-FILE-NAME . END PROGRAM DIVIDE-25.