Sunday, 1 September 2013

Sample program to compare two input files and write to output file

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG004.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
             SELECT INFILE1 ASSIGN TO DD1
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS1.

             SELECT INFILE2 ASSIGN TO DD2
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS2.

             SELECT OUTFILE ASSIGN TO DD3
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS OUTFS.

       DATA DIVISION.
       FILE SECTION.
       FD INFILE1.
       01 FS-INREC1.
          88 IN1-EOF               VALUE HIGH-VALUES.
          05 FS-ID                 PIC 9(3).
          05 FILLER                PIC X(1).
          05 FS-NAME               PIC X(25).
          05 FILLER                PIC X(1).
          05 FS-CLASS              PIC X(5).
          05 FILLER                PIC X(45).

       FD INFILE2.
       01 FS-INREC2.
          88 IN2-EOF               VALUE HIGH-VALUES.
          05 IS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB1M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB2M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB3M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB4M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB5M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB6M              PIC 9(3).
          05 FILLER                PIC X(53).

       FD OUTFILE.
       01 FS-OUTREC.
          05 OS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 OS-NAME               PIC X(25).
          05 FILLER                PIC X.
          05 OS-CLASS              PIC X(5).
          05 FILLER                PIC X.
          05 OS-TOTAL              PIC 9(3).
          05 FILLER                PIC X.
          05 OS-GRADE              PIC X(2).
          05 FILLER                PIC X(38).

       WORKING-STORAGE SECTION.
       77 INFS1                    PIC XX.
       77 INFS2                    PIC XX.
       77 OUTFS                    PIC XX.
       01 TOTAL-M                  PIC 9(3).
       01 AVG-M                    PIC 9(3).
       01 GRADE-M                  PIC X(2).
       01 STUDMRK1            PIC 9(2).
       01 STUDMRK2            PIC 9(2).
       01 STUDMRK3            PIC 9(2).
       01 STUDMRK4            PIC 9(2).
       01 STUDMRK5            PIC 9(2).
       01 STUDMRK6            PIC 9(2).

           EXEC SQL
                INCLUDE STUDBLE
           END-EXEC.
           EXEC SQL
                INCLUDE SQLCA
           END-EXEC.


           EXEC SQL
                DECLARE CUR_STU CURSOR FOR SELECT STUD_ID,STUD_NAME,
                        STUD_CLASS,STUD_MRK1,
                        STUD_MRK2,STUD_MRK3,STUD_MRK4,STUD_MRK5
                        STUD_MRK6 FROM OZA062.STUDBLE
           END-EXEC.


       PROCEDURE DIVISION.

      ***  MAIN PARA IS SUSED TO DIRECT THE FLOW FOR THE PROGRAM IN ***
      ***                 RIGHT DIRECTION                           ***
       001-MAIN-PARA.
            PERFORM 002-OPEN-PARA.
            PERFORM 003-READ-PARA UNTIL IN1-EOF.
            PERFORM 009-CLOSE-PARA.

      ***   OPEN PARA WHERE ALL THE FLAT FILES ARE OPENED           ***
       002-OPEN-PARA.
            OPEN INPUT INFILE1.
            IF INFS1 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE1 : " INFS1
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN INPUT INFILE2.
            IF INFS2 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE2 : " INFS2
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN OUTPUT OUTFILE.
            IF OUTFS NOT = '00'
            DISPLAY "ERROR IN OPEN OUTFILE : " OUTFS
            END-IF.

             EXEC SQL
                  OPEN CUR_STU
             END-EXEC.
             IF SQLCODE NOT = 0 THEN
             DISPLAY "ERROR IN OPEN CURSOR" SQLCODE
             END-IF.

      *** READ PARA IS USED TO READ THE FIRST INFILE TO CHECK       ***
       003-READ-PARA.
            READ INFILE1 AT END PERFORM 005-FETCH-PARA.

            IF INFS1 NOT = '00' THEN
               DISPLAY "ERROR IN READING INFILE1: " INFS1
               PERFORM 009-CLOSE-PARA
            ELSE
               PERFORM 031-CHECK-PARA
            END-IF.

      *** CHECK PARA IS TO CHECK WEATHER THE FILE IS IN FILE2       ***
       031-CHECK-PARA.
            READ INFILE2 AT END SET IN2-EOF TO TRUE
            NOT AT END
            IF FS-ID = IS-ID THEN
               DISPLAY "INSERT PROCEED"
               PERFORM 004-INSERT-PARA
            ELSE
               DISPLAY "FILE NOT MATCH"
               PERFORM 032-LCHECK-PARA
            END-IF.

      *** LCHECK PARA IS TO CHECK WEATHER THE FILE IS PRESENT OR NOR ***
       032-LCHECK-PARA.
            READ INFILE2 PERFORM UNTIL FS-ID = IS-ID
            END-PERFORM.
            IF FS-ID = IS-ID THEN
            DISPLAY "FILE FOUND AT LCHECK"
            PERFORM 004-INSERT-PARA
            ELSE
            DISPLAY "FILE IS NOT PRESENT"
            END-IF.

      ***  HERE THE VALUES ARE INSERTED IN DATABASE TABLE           ***
       004-INSERT-PARA.
            MOVE FS-ID TO STUD-ID.
            MOVE FS-NAME TO STUD-NAME.
            MOVE FS-CLASS TO STUD-CLASS.
            MOVE IS-SUB1M TO STUD-MRK1.
            MOVE IS-SUB2M TO STUD-MRK2.
            MOVE IS-SUB3M TO STUD-MRK3.
            MOVE IS-SUB4M TO STUD-MRK4.
            MOVE IS-SUB5M TO STUD-MRK5.
            MOVE IS-SUB6M TO STUD-MRK6.

            EXEC SQL
                 INSERT INTO OZA062.STUDBLE VALUES(:STUD-ID,:STUD-NAME,
                     :STUD-CLASS,:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,
                     :STUD-MRK4,:STUD-MRK5,:STUD-MRK6)
            END-EXEC.
            IF SQLCODE NOT = 0 THEN
              DISPLAY "ERROR SQLCODE: " SQLCODE
              PERFORM 009-CLOSE-PARA
            ELSE
              DISPLAY "INSERT SUCCESS"
            END-IF.

      ***  FETCH PARA IS USED TO FETCH THE VAUES FROM THE TABLE     ***
       005-FETCH-PARA.


             EXEC SQL
                  FETCH CUR_STU INTO :STUD-ID,:STUD-NAME,:STUD-CLASS,
                     :STUD-MRK1,:STUD-MRK2,:STUD-MRK3,:STUD-MRK4,
                     :STUD-MRK5,:STUD-MRK6
             END-EXEC.
             IF SQLCODE = 0 THEN
                 DISPLAY "FETCH SUCCESS"
                 MOVE STUD-MRK1 TO STUDMRK1
                 DISPLAY STUDMRK1
                 MOVE STUD-MRK2 TO STUDMRK2
                 MOVE STUD-MRK3 TO STUDMRK3
                 MOVE STUD-MRK4 TO STUDMRK4
                 MOVE STUD-MRK5 TO STUDMRK5
                 MOVE STUD-MRK6 TO STUDMRK6
                 PERFORM 006-CALC-PARA
             ELSE
                 DISPLAY "ERROR IN FETCH PARA"
                 PERFORM 009-CLOSE-PARA
             END-IF.

      *** CALC PARA IS USED TO CALCULATE THE VALUES FOR GRADE       ***
       006-CALC-PARA.
             IF STUDMRK1 > 35 AND STUDMRK2 > 35 THEN
                 IF STUDMRK3 > 35 AND STUDMRK4 > 35 THEN
                     IF STUDMRK5 > 35 AND STUDMRK6 > 35 THEN
                         DISPLAY "WRITE PARA"
                         PERFORM 007-WRITE-PARA
                      ELSE
                         DISPLAY "CALCULATION STARTED"
                         PERFORM 005-FETCH-PARA
                      END-IF
                 ELSE
                    PERFORM 005-FETCH-PARA
                 END-IF
             ELSE
                PERFORM 007-WRITE-PARA
             END-IF.
      *      EVALUATE STUD-MRK1 >= 35 ALSO STUD-MRK2 >= 35 ALSO
      *               STUD-MRK3 >= 35 ALSO STUD-MRK4 >= 35 ALSO
      *               STUD-MRK5 >= 35 ALSO STUD-MRK6 >= 35
      *         WHEN TRUE ALSO TRUE ALSO TRUE ALSO TRUE ALSO TRUE
      *              ALSO TRUE PERFORM 007-WRITE-PARA
      *         WHEN OTHER PERFORM 005-FETCH-PARA
      *      END-EVALUATE.

      *** WRIRE PARA HERE THE VALUES ARE WRITTEN INTO THE OUFILE    ***
       007-WRITE-PARA.
              DISPLAY "WRITING STARTED".
              COMPUTE TOTAL-M = STUDMRK1 + STUDMRK2 + STUDMRK3 +
                                STUDMRK4 + STUDMRK5 + STUDMRK6.
              COMPUTE AVG-M = TOTAL-M / 6.

              EVALUATE AVG-M
                  WHEN 35 THRU 60 MOVE 'C' TO GRADE-M
                  WHEN 61 THRU 70 MOVE 'B' TO GRADE-M
                  WHEN 71 THRU 90 MOVE 'A' TO GRADE-M
                  WHEN 91 THRU 100 MOVE 'A+' TO GRADE-M
              END-EVALUATE.

              MOVE STUD-ID TO OS-ID.
              MOVE STUD-NAME TO OS-NAME.
              MOVE STUD-CLASS TO OS-CLASS.
              MOVE TOTAL-M TO OS-TOTAL.
              MOVE GRADE-M TO OS-GRADE.
              WRITE FS-OUTREC.
              PERFORM 005-FETCH-PARA.

      ***         HERE THE END OF FILE AND TABLE                   ***
       009-CLOSE-PARA.
              EXEC SQL
                   CLOSE CUR_STU
              END-EXEC.

              CLOSE INFILE1 INFILE2 OUTFILE.
              STOP RUN.

No comments:

Post a Comment

Expense Handler Application with advance technologies

Budget Planner  One of the application developed with Ionic 4 and Python-Flask.  Ionic 4 code:  https://github.com/logeshbuiltin/Expense...