------ Sample Input ------ 01 +123456789 Alex 02 -123456789 Dave 03 +023456789 Brett 04 -023456789 Ryan ------ My Code ------ *----------------------------------------------------------------- IDENTIFICATION DIVISION. *----------------------------------------------------------------- PROGRAM-ID. PROGRAM5. AUTHOR. MICHAELLUSTFIELD. *----------------------------------------------------------------- * GENERATES A SIMPLE REPORT FROM A DATA FILE *----------------------------------------------------------------- *----------------------------------------------------------------- ENVIRONMENT DIVISION. *----------------------------------------------------------------- *-------------------------------- INPUT-OUTPUT SECTION. *-------------------------------- FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO 'C:\COBOL\Pgm5byMichaelLustfield\Pgm5Input.txt' ORGANIZATION IS LINE SEQUENTIAL. SELECT OUTPUT-FILE ASSIGN TO 'C:\COBOL\Pgm5byMichaelLustfield\Pgm5Output.doc' ORGANIZATION IS LINE SEQUENTIAL. *----------------------------------------------------------------- DATA DIVISION. *----------------------------------------------------------------- * |-------------------------------- * | INPUT FILE * |-------------------------------- FD INPUT-FILE. 01 INPUT-RECORDS. 05 RECORD-IR PIC 99. 05 PIC X. 05 NUMBER-IR PIC S99999999V99. 05 PIC X. 05 NAME-IR PIC X. * |-------------------------------- * | OUTPUT FILE * |-------------------------------- FD OUTPUT-FILE. 01 REPORT-RECORD PIC X(60). *----------------------------------------------------------------- WORKING-STORAGE SECTION. *----------------------------------------------------------------- * |-------------------------------- * | REPORT VARIABLES * |-------------------------------- 01 DETAIL-LINE. 05 RECORD-NUMBER-DL PIC 9(02). 05 NUMBERS-DL. 10 NUMBER1-DL PIC $$,$$$,$$9.99+. 10 NUMBER2-DL PIC ZZZ,ZZZ,ZZ9CR. 10 NUMBER3-DL PIC Z,ZZZ,ZZ9.99-. 10 NUMBER4-DL PIC ---,---,--9.9. 05 WORDS1-DL PIC X(04). 05 WORDS2-DL PIC X/X0XXXXXX. 01 LINES-COUNTER PIC 9(02) VALUE 00. 01 PAGES-COUNTER PIC 9(02) VALUE 01. 01 PAGES-LINES. 05 COMMENT-PL PIC X(05) VALUE 'Page '. 05 COUNTED-PL PIC Z9 VALUE 01. * |-------------------------------- * | REPORT TIME * |-------------------------------- 01 REPORT-DATE-TIME. 05 YEAR-RDT PIC X(04). 05 MONTH-RDT PIC X(02). 05 DAY-RDT PIC X(02). 05 HOUR-RDT PIC X(02). 05 MINUTE-RDT PIC X(02). 05 SECOND-RDT PIC X(02). 05 HUND-SEC-RDT PIC X(02). 05 GMTO-RDT PIC X(05). * |-------------------------------- * | REPORT CONSTANTS * |-------------------------------- 01 REPORT-HEADING PIC X(39) VALUE 'Program 5 Output by Michael Lustfield'. 01 REPORT-DATE. 05 COMMENT-RD PIC X(07) VALUE 'DATE: '. 05 MONTH-RD PIC X(02)/. 05 DAY-RD PIC X(02)/. 05 YEAR-RD PIC X(04). 01 REPORT-TIME. 05 COMMENT-RT PIC X(07) VALUE 'TIME: '. 05 HOUR-RT PIC X(02). 05 COLON-RT PIC X(01) VALUE ':'. 05 MINUTE-RT PIC X(02). 01 DASH-LINE PIC X(60) VALUE '--------------------------------------------'. * |-------------------------------- * | TEMPORARY STORAGE * |-------------------------------- 01 WORDS1. 05 PIC X(02). 05 LETTERS-W1 PIC X(04). 05 PIC X(02). * |-------------------------------- * | FLAGS * |-------------------------------- 01 EOF-FLAG PIC X(05) VALUE 'FALSE'. *----------------------------------------------------------------- PROCEDURE DIVISION. *----------------------------------------------------------------- *-------------------------------- 100-MAIN-MODULE. *-------------------------------- PERFORM 800-INITIALIZATION PERFORM UNTIL EOF-FLAG = 'TRUE' READ INPUT-FILE AT END MOVE 'TRUE' TO EOF-FLAG NOT AT END PERFORM 200-PROCESS-RECORD END-READ END-PERFORM PERFORM 900-TERMINATION STOP RUN. *-------------------------------- 200-PROCESS-RECORD. *-------------------------------- IF LINES-COUNTER < 19 THEN PERFORM 220-WRITE-RECORD ELSE PERFORM 230-WRITE-PAGE-BREAK PERFORM 220-WRITE-RECORD END-IF. *-------------------------------- 210-WRITE-HEADING. *-------------------------------- MOVE PAGES-COUNTER TO COUNTED-PL IF PAGES-COUNTER > 1 THEN WRITE REPORT-RECORD FROM REPORT-HEADING AFTER PAGE ELSE WRITE REPORT-RECORD FROM REPORT-HEADING AFTER 0 END-IF WRITE REPORT-RECORD FROM REPORT-DATE AFTER 1 WRITE REPORT-RECORD FROM REPORT-TIME AFTER 1 WRITE REPORT-RECORD FROM PAGES-LINES AFTER 1 WRITE REPORT-RECORD FROM DASH-LINE AFTER 3 MOVE 7 TO LINES-COUNTER. *-------------------------------- 220-WRITE-RECORD. *-------------------------------- MOVE RECORD-IR TO RECORD-NUMBER-DL MOVE NUMBER-IR TO NUMBER1-DL MOVE NUMBER-IR TO NUMBER2-DL MOVE NUMBER-IR TO NUMBER3-DL MOVE NUMBER-IR TO NUMBER4-DL MOVE NAME-IR TO WORDS1-DL MOVE NAME-IR TO WORDS1 MOVE LETTERS-W1 TO WORDS2-DL WRITE REPORT-RECORD FROM DETAIL-LINE AFTER 1 ADD 1 TO LINES-COUNTER. *-------------------------------- 230-WRITE-PAGE-BREAK. *-------------------------------- ADD 1 TO PAGES-COUNTER WRITE REPORT-RECORD FROM DASH-LINE AFTER 1 PERFORM 210-WRITE-HEADING. *-------------------------------- 800-INITIALIZATION. *-------------------------------- OPEN INPUT INPUT-FILE OUTPUT OUTPUT-FILE MOVE FUNCTION CURRENT-DATE TO REPORT-DATE-TIME MOVE MONTH-RDT TO MONTH-RD MOVE DAY-RDT TO DAY-RD MOVE YEAR-RDT TO YEAR-RD MOVE HOUR-RDT TO HOUR-RT MOVE MINUTE-RDT TO MINUTE-RT PERFORM 210-WRITE-HEADING. *-------------------------------- 900-TERMINATION. *-------------------------------- WRITE REPORT-RECORD FROM DASH-LINE CLOSE INPUT-FILE OUTPUT-FILE.