rendered paste body------ 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 9(02).
05 PIC X(01).
05 NUMBER-IR PIC S9(8)V99.
05 PIC X(01).
05 NAME-IR PIC X(08).
* |--------------------------------
* | 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.