MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

filling the missing fields with a value

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming
View previous topic :: View next topic  
Author Message
chandra_vssv
Beginner


Joined: 08 May 2005
Posts: 26
Topics: 12
Location: pune

PostPosted: Thu Jun 01, 2006 7:53 am    Post subject: filling the missing fields with a value Reply with quote

Hi,

I have an input file like this
2006052 4405A551117386.054009780432805400
2006052 4405A551117386.054009780432805401
2006052 4405A551117386.054009780532905402 AAA
2006052 4405A551117386.054009780667805400 OOB
2006052 40540097963724.054009796372405400 CDF
2006052 40540097963724.054009796372405405 OOB
2006052 40540097963724.054009796372405406

I have to check for 'OOB' value in the particular field , and write that value to records having equal account numbers if that particular field have spaces , account numbers are 4405A551117386 , 40540097963724 as mentioned.Same account number may contain other value in that particular field, as 'AAA' that should not be replaced.

output should look like this
2006052 4405A551117386.054009780432805400 OOB
2006052 4405A551117386.054009780432805401 OOB
2006052 4405A551117386.054009780532905402 AAA
2006052 4405A551117386.054009780667805400 OOB
2006052 40540097963724.054009796372405400 CDF
2006052 40540097963724.054009796372405405 OOB
2006052 40540097963724.054009796372405406 OOB

Please provide me solution in COBOL.
_________________
Regards,
Chandu
Back to top
View user's profile Send private message Yahoo Messenger
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Thu Jun 01, 2006 8:19 am    Post subject: Reply with quote

Chandra,

Run a sort step and pull all 'OOB' records into a seperate file. Now read this file and match it against the original file on the Account number and if matched move 'OOB' to the output file.

If 'OOB' records are less you can even load them up in an internal table.

Hope this helps...

Cheers

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
shekar123
Advanced


Joined: 22 Jul 2005
Posts: 528
Topics: 90
Location: Bangalore India

PostPosted: Fri Jun 02, 2006 3:23 am    Post subject: Reply with quote

Kolusu,

I had coded as per the steps given by you .Please see if i am correct in my approach.
Code:
       IDENTIFICATION DIVISION.
       PROGRAM-ID.    SAMPPGM.
       AUTHOR.        SHEKAR.
       DATE-WRITTEN.  06/02/2006.
       DATE-COMPILED. 06/02/2006.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
      *SOURCE-COMPUTER. IBM-370 WITH DEBUGGING MODE.
       SOURCE-COMPUTER. IBM-370.
       OBJECT-COMPUTER. IBM-370.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

           SELECT INPUT-FILE1  ASSIGN TO INFILE1
                  FILE STATUS IS INPUT-FILE1-STATUS.
           SELECT INPUT-FILE2  ASSIGN TO INFILE2
                  FILE STATUS IS INPUT-FILE2-STATUS.
           SELECT REPORT-FILE   ASSIGN TO RPTFILE
                  FILE STATUS IS REPORT-FILE-STATUS.

       DATA DIVISION.
       FILE SECTION.

       FD  INPUT-FILE1
           RECORDING MODE IS F
           BLOCK CONTAINS 0 CHARACTERS
           DATA RECORD IS INPUT-REC1.

       01 INPUT-REC1.
          05 A                     PIC X(07).
          05 FILLER                PIC X(01).
          05 B                     PIC X(14).
          05 FILLER                PIC X(01).
          05 C                     PIC X(18).
          05 FILLER                PIC X(01).
          05 D                     PIC X(03).
          05 FILLER                PIC X(35).

       FD  INPUT-FILE2
           RECORDING MODE IS F
           BLOCK CONTAINS 0 CHARACTERS
           DATA RECORD IS INPUT-REC2.

       01 INPUT-REC2.
          05 A                     PIC X(07).
          05 FILLER                PIC X(01).
          05 B                     PIC X(14).
          05 FILLER                PIC X(01).
          05 C                     PIC X(18).
          05 FILLER                PIC X(01).
          05 D                     PIC X(03).
          05 FILLER                PIC X(35).

       FD  REPORT-FILE
           RECORDING MODE IS F
           BLOCK CONTAINS 0 CHARACTERS
           DATA RECORD IS REPORT-LINE.

       01 REPORT-LINE              PIC X(80).

       WORKING-STORAGE SECTION.
       01 REPORT-REC.
          05 R-A                   PIC X(07).
          05 FILLER                PIC X(01).
          05 R-B                   PIC X(14).
          05 FILLER                PIC X(01).
          05 R-C                   PIC X(18).
          05 FILLER                PIC X(01).
          05 R-D                   PIC X(03).
          05 FILLER                PIC X(35).

       01  WS-FILE-STATS.
           05  INPUT-FILE1-STATUS             PIC  X(02) VALUE ZERO.
               88 INPUT-FILE1-IO-OKAY      VALUE '00'.
               88 INPUT-FILE1-END          VALUE '10'.
           05  INPUT-FILE2-STATUS             PIC  X(02) VALUE ZERO.
               88 INPUT-FILE2-IO-OKAY      VALUE '00'.
               88 INPUT-FILE2-END          VALUE '10'.
           05  REPORT-FILE-STATUS            PIC  X(02) VALUE ZERO.
               88 REPORT-FILE-IO-OKAY        VALUE '00'.
               88 REPORT-FILE-END            VALUE '10'.

       01  WS-FLAGS.
           05 INPUT-EOF1-SWITCH            PIC X(01) VALUE SPACE.
              88 INPUT-NOT-EOF1           VALUE 'Y'.
              88 INPUT-EOF1               VALUE 'N'.
           05 INPUT-EOF2-SWITCH            PIC X(01) VALUE SPACE.
              88 INPUT-NOT-EOF2           VALUE 'Y'.
              88 INPUT-EOF2               VALUE 'N'.

       01  WS-LITERALS.
           05 ABEND-MSG                PIC X(80).
           05 ABEND-STATUS             PIC X(02).

       PROCEDURE DIVISION.
      ******************************************************************
      *                                                                *
      *        P R O C E D U R E     D I V I S I O N                   *
      *                                                                *
      ******************************************************************

       000-MAINLINE.
      ******************************************************************
      * THIS PROCEDURE CONTROLS MAIN PROCESSING OF THE PROGRAM.        *
      ******************************************************************
      D    DISPLAY 'ENTRY TO SAMPPGM '.

           PERFORM 100-STARTUP      THRU 100-STARTUP-EXIT.
           PERFORM 200-PROCESS-DATA THRU 200-PROCESS-DATA-EXIT.
           PERFORM 300-FINISH       THRU 300-FINISH-EXIT.

      D    DISPLAY 'EXIT FROM SAMPPGM '.

       000-MAINLINE-EXIT.
           GOBACK.

      ******************************************************************
      *    THIS PARAGRAPH PERFORMS ALL NECESSARY HOUSEKEEPING          *
      *    WORK.THIS INCLUDES INITIALIZING WORKING-STORAGE VARIABLES   *
      *    AND OPENING FILES REQUIRED FOR PROGRAM PROCESSING.          *
      ******************************************************************
       100-STARTUP.
      D    DISPLAY '100-STARTUP'.

           OPEN INPUT INPUT-FILE1.
           EVALUATE INPUT-FILE1-STATUS
              WHEN '00'
                   CONTINUE
              WHEN OTHER
                   DISPLAY '*********** ERROR *******************'
                   MOVE '100:OPEN FAILED FOR INPUT-FILE' TO ABEND-MSG
                   MOVE INPUT-FILE1-STATUS               TO ABEND-STATUS
                   DISPLAY "*********** ERROR *******************"
                   PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-EVALUATE.

           OPEN INPUT INPUT-FILE2.
           EVALUATE INPUT-FILE2-STATUS
              WHEN '00'
                   CONTINUE
              WHEN OTHER
                   DISPLAY '*********** ERROR *******************'
                   MOVE '100:OPEN FAILED FOR INPUT-FILE' TO ABEND-MSG
                   MOVE INPUT-FILE2-STATUS               TO ABEND-STATUS
                   DISPLAY "*********** ERROR *******************"
                   PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-EVALUATE.

           OPEN OUTPUT REPORT-FILE.
           EVALUATE REPORT-FILE-STATUS
              WHEN '00'
                 CONTINUE
              WHEN OTHER
                 DISPLAY '*********** ERROR *******************'
                 MOVE '100 :OPEN FAILED FOR REPORT FILE' TO ABEND-MSG
                 MOVE REPORT-FILE-STATUS                 TO ABEND-STATUS
                 DISPLAY '*********** ERROR *******************'
                 PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-EVALUATE.

      D    DISPLAY '100-STARTUP-EXIT'.
       100-STARTUP-EXIT.
           EXIT.

       110-READ-INPUT-FILE1.
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  200-PROCESS-DATA                                   *
      ******************************************************************
      D    DISPLAY '110-READ-INPUT-FILE1'.

           INITIALIZE INPUT-REC1.

           READ INPUT-FILE1
           AT END
                SET INPUT-EOF1 TO TRUE
           NOT AT END
                IF INPUT-FILE1-STATUS IS EQUAL TO '00'
                   CONTINUE
                ELSE
                   MOVE '110:READ FAILED FOR INPUT FILE' TO ABEND-MSG
                   MOVE INPUT-FILE1-STATUS   TO ABEND-STATUS
                   PERFORM 999-ABEND-ERROR  THRU 999-ABEND-ERROR-EXIT
                END-IF
           END-READ.

      D    DISPLAY '110-READ-INPUT-FILE1-EXIT'.
       110-READ-INPUT-FILE1-EXIT.
           EXIT.

       120-READ-INPUT-FILE2.
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  400-PROCESS-DATA                                   *
      ******************************************************************
      D    DISPLAY '120-READ-INPUT-FILE2'.

           INITIALIZE INPUT-REC2.

           READ INPUT-FILE2
           AT END
                SET INPUT-EOF2 TO TRUE
           NOT AT END
                IF INPUT-FILE2-STATUS IS EQUAL TO '00'
                   CONTINUE
                ELSE
                   MOVE '120:READ FAILED FOR INPUT FILE' TO ABEND-MSG
                   MOVE INPUT-FILE2-STATUS   TO ABEND-STATUS
                   PERFORM 999-ABEND-ERROR  THRU 999-ABEND-ERROR-EXIT
                END-IF
           END-READ.

      D    DISPLAY '120-READ-INPUT-FILE2-EXIT'.
       120-READ-INPUT-FILE2-EXIT.
           EXIT.

       200-PROCESS-DATA.
      ******************************************************************
      * THIS PROCEDURE CONTROLS THE MAIN PROCESS                       *
      * CALLS:                                                         *
      * CALLED BY:  000-MAINLINE                                       *
      ******************************************************************
      D    DISPLAY '200-PROCESS-DATA'.

           SET     INPUT-NOT-EOF1 INPUT-NOT-EOF2 TO TRUE.
           PERFORM 110-READ-INPUT-FILE1 THRU 110-READ-INPUT-FILE1-EXIT.
           PERFORM 120-READ-INPUT-FILE2 THRU 120-READ-INPUT-FILE2-EXIT.

           PERFORM UNTIL INPUT-EOF1
              PERFORM UNTIL INPUT-EOF2
                   IF B OF INPUT-REC2 EQUAL     B OF INPUT-REC1 OR
                      B OF INPUT-REC2 NOT EQUAL B OF INPUT-REC1
                      IF D OF INPUT-REC2 = SPACES
                         MOVE A OF INPUT-REC2 TO R-A OF REPORT-REC
                         MOVE B OF INPUT-REC2 TO R-B OF REPORT-REC
                         MOVE C OF INPUT-REC2 TO R-C OF REPORT-REC
                         MOVE 'OOB'           TO R-D OF REPORT-REC
                         MOVE SPACES TO REPORT-REC(8:1)
                                        REPORT-REC(42:1)
                                        REPORT-REC(46:35)
                         WRITE REPORT-LINE FROM REPORT-REC
                      ELSE
                         MOVE A OF INPUT-REC2 TO R-A OF REPORT-REC
                         MOVE B OF INPUT-REC2 TO R-B OF REPORT-REC
                         MOVE C OF INPUT-REC2 TO R-C OF REPORT-REC
                         MOVE D OF INPUT-REC2 TO R-D OF REPORT-REC
                         MOVE SPACES TO REPORT-REC(8:1)
                                        REPORT-REC(42:1)
                                        REPORT-REC(46:35)
                         WRITE REPORT-LINE FROM REPORT-REC
                      END-IF
                  END-IF
                  PERFORM 120-READ-INPUT-FILE2 THRU
                          120-READ-INPUT-FILE2-EXIT
              END-PERFORM
              MOVE SPACES TO B OF INPUT-REC1
                             B OF INPUT-REC2
              PERFORM 110-READ-INPUT-FILE1 THRU
                      110-READ-INPUT-FILE1-EXIT
           END-PERFORM.

      D    DISPLAY '200-PROCESS-DATA-EXIT'.
       200-PROCESS-DATA-EXIT.
           EXIT.

       300-FINISH.
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  000-MAINLINE                                       *
      ******************************************************************
      D    DISPLAY '300-FINISH'.

           CLOSE INPUT-FILE1.
           IF INPUT-FILE1-IO-OKAY
              CONTINUE
           ELSE
              DISPLAY '************************************'
              MOVE '800: CLOSE FAILED FOR INPUT FILE' TO ABEND-MSG
              MOVE INPUT-FILE1-STATUS TO ABEND-STATUS
              DISPLAY '************************************'
              PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-IF.

           CLOSE INPUT-FILE2.
           IF INPUT-FILE2-IO-OKAY
              CONTINUE
           ELSE
              DISPLAY '************************************'
              MOVE '800: CLOSE FAILED FOR INPUT FILE' TO ABEND-MSG
              MOVE INPUT-FILE2-STATUS TO ABEND-STATUS
              DISPLAY '************************************'
              PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-IF.

           CLOSE REPORT-FILE.
           IF REPORT-FILE-IO-OKAY
              CONTINUE
           ELSE
              DISPLAY '*********** ERROR *******************'
              MOVE '800 :CLOSE FAILED FOR REPORT FILE'   TO ABEND-MSG
              MOVE REPORT-FILE-STATUS                    TO ABEND-STATUS
              DISPLAY '*********** ERROR *******************'
              PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
           END-IF.

      D    DISPLAY '800-FINISH-EXIT'.
       300-FINISH-EXIT.
           EXIT.

       999-ABEND-ERROR.
      ******************************************************************
      * THIS PROCEDURE CAUSES THE PROGRAM TO STOP IN THE EVENT OF AN   *
      * ERROR AND INHIBITS FURTHER PROCESSING.                         *
      * CALLS:      STOP-RUN.                                          *
      ******************************************************************

      D    DISPLAY '999-ABEND-ERROR'.
           DISPLAY '*************ERROR*********************'.
           DISPLAY 'SAMPPGM  ENCOUNTERED A FATAL ERROR'.
           DISPLAY ABEND-MSG.

           IF ABEND-STATUS IS NOT  = SPACES
              DISPLAY 'ABEND-STATUS = ',  ABEND-STATUS
           END-IF.

           PERFORM STOP-RUN.

      D    DISPLAY '999-ABEND-ERROR-EXIT'.
       999-ABEND-ERROR-EXIT.
           EXIT.

       STOP-RUN.
           STOP RUN.

INPUT
Code:
2006052 4405A551117386.054009780432805400   
2006052 4405A551117386.054009780432805401   
2006052 4405A551117386.054009780532905402 AAA
2006052 4405A551117386.054009780667805400 OOB
2006052 40540097963724.054009796372405400 CDF
2006052 40540097963724.054009796372405405 OOB
2006052 40540097963724.054009796372405406   

OUTPUT
Code:

2006052 4405A551117386.054009780432805400 OOB
2006052 4405A551117386.054009780432805401 OOB
2006052 4405A551117386.054009780532905402 AAA
2006052 4405A551117386.054009780667805400 OOB
2006052 40540097963724.054009796372405400 CDF
2006052 40540097963724.054009796372405405 OOB
2006052 40540097963724.054009796372405406 OOB

RUN JCL
Code:

//STEP010  EXEC PGM=SORT                                               
//SORTIN   DD   DSN=SHEKAR.DATA.INPUT,DISP=SHR                         
//SORTOUT  DD   DSN=SHEKAR.DATA.OUTPUT,DISP=SHR                         
//SYSPRINT DD SYSOUT=*                                                 
//SYSOUT   DD SYSOUT=*                                                 
//SYSIN    DD *                                                         
  OPTION COPY                                                           
  INCLUDE COND=(43,3,CH,EQ,C'OOB')                                     
/*                                                                     
//STEP020  EXEC PGM=SAMPPGM                                             
//STEPLIB  DD   DSN=SHEKAR.COBOL.LOAD,DISP=SHR                         
//INFILE1  DD   DSN=SHEKAR.DATA.OUTPUT,DISP=SHR                         
//INFILE2  DD   DSN=SHEKAR.DATA.INPUT,DISP=SHR                         
//RPTFILE  DD   DSN=SHEKAR.RPT.OUTPUT,DISP=SHR                         
//SYSPRINT DD   SYSOUT=*                                                 
//SYSOUT   DD   SYSOUT=*                                                 
//

_________________
Shekar
Grow Technically
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12378
Topics: 75
Location: San Jose

PostPosted: Fri Jun 02, 2006 7:57 am    Post subject: Reply with quote

Shekhar123,

The program looks good, but you are missing the Top-down approach. Your program should flow from top to bottom and it will be easier to understand and maintain.

Look at the cobol solution posted here.

http://mvsforums.com/helpboards/viewtopic.php?p=15#15

On second thoughts, I just realized that you really don't need 2 files to get the desired results.

Just sort the file on the field B ascending and field D descending. By doing so all the space records are sorted to the bottom for each key.

Now store the 'oob' value and the key value in a working-storage section. Now match the record read from the file to working-storage variables and if the field is a space on the record read just move '00b'.

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Application Programming All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group