Comparing 2 files based on Acct number without using tables

This is a Mainframe COBOL forum - you can post your queries on Mainframe COBOL, VS COBOL II, COBOL/370 , Enterprise COBOL

Moderators: dbzTHEdinosauer, Moderator Group

Post Reply
nrajini
Member
Posts: 23
Joined: Sun Oct 05, 2008 4:35 pm

Comparing 2 files based on Acct number without using tables

Post by nrajini » Sat Nov 01, 2008 9:36 pm

Hi,

I have got a doubt , kindly clarify

In a cobol program , I have got 2 files..
I need to compare the files based on account number..

If match is found I have to write to the O/p file..

I shoudl not use tables .. How to go about in this case ..

Thanks,
Rajini

User avatar
Natarajan
Moderator
Posts: 537
Joined: Fri Oct 10, 2008 12:57 pm
Location: chennai
Contact:

Post by Natarajan » Sun Nov 02, 2008 7:32 am

We dont have any COBOL verbs to do this matcing easily.. you need to implement your own logic to do this...

before we suggest somethin to you..... let us know, what logic you can think of....
then we will sugest, improved version of it...


I am not writing logic here.. to make you think...
Natarajan
Chennai

Veera
Moderator
Posts: 111
Joined: Wed Feb 22, 2006 2:59 pm

Post by Veera » Thu Nov 13, 2008 2:25 am

Rajini,

I have posted one sample ICETOOL utility which can be used for matching
of 2 files on key. I am wondering if you can use a utility rather than a COBOL program.

http://www.mainframegurukul.com/Mainfra ... php?t=3596

Thanks,
Veera.

Anuj Dhawan
Moderator
Posts: 1625
Joined: Sat Aug 09, 2008 9:02 am
Location: Mumbai, India

Post by Anuj Dhawan » Sun Nov 23, 2008 5:21 am

Hi Rajini,

Is your question been resolved or you are still working around ? Your question is about simple 2-file comparison program & 'am pretty sure there is laready one in existance at your shop - you may look at that or can post us back with what you have tried.
Regards,
Anuj

nrajini
Member
Posts: 23
Joined: Sun Oct 05, 2008 4:35 pm

Post by nrajini » Wed Nov 26, 2008 4:46 pm

Hi All,

Using ICETOOL utility we can compare the files quickly . But I need to do it in Cobol. Since I am new to Cobol I didnt know how to do . Pls help me.
Regards,
Rajini

Anuj Dhawan
Moderator
Posts: 1625
Joined: Sat Aug 09, 2008 9:02 am
Location: Mumbai, India

Post by Anuj Dhawan » Thu Nov 27, 2008 1:52 am

Hi,

Below is a small sample program that matches/merges 2 sequential files that have been previously put "in sequence (SORTed)".

Depending on your exact requirement, changes may need to be made, but the overall process works for most cases. If your files have a 1-to-1 or a 1-to-many relationship, the model should work for you.

Code: Select all

       IDENTIFICATION DIVISION.
       PROGRAM-ID.  SAMPMTCH.
       DATE-COMPILED.
      *---------------------------------------------------------------*
      *                                                               *
      * THIS PROGRAM COMPARES THE CAP INFO AGAINS THE ELIG INFO AND   *
      *  CREATES A FILE OF MATCHED PROVIDER, PERSON, RATE INFO.       *
      *  THE NEW-RATE FILE IS TAB-DELIMITED FOR DOWNLOAD AND USE      *
      *  WITH A WIN-BASED SYSTEM.                                     *
      *                                                               *
      * THIS CODE IS A STRIPPED DOWN VERSION OF AN ACTUAL PRODUCTION  *
      *  PROGRAM - NEARLY ALL OF THE BUSINESS RULES LOGIC HAS BEEN    *
      *  REMOVED TO MAKE THE EXAMPLE EASIER TO READ.                  *
      *                                                               *
      * IF YOU CHOOSE TO USE THIS MODEL, PLEASE MAKE SURE YOU         *
      *  THOROUGHLY TEST YOUR VERSION BEFORE USING FOR SOME BUSINESS  *
      *  REQUIREMENT.                                                 *
      *                                                               *
      *---------------------------------------------------------------*
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
      *
           SELECT COMP-CAP      ASSIGN TO UT-S-CAP.
           SELECT COMP-ELG      ASSIGN TO UT-S-ELIG.
           SELECT NEW-RATE      ASSIGN TO UT-S-NEWRATE.
      *
       DATA DIVISION.
       FILE SECTION.
      *
       FD  COMP-CAP
           LABEL RECORDS ARE STANDARD
           RECORDING MODE IS F
           BLOCK CONTAINS 0 RECORDS.

       01  COMP-CAP-REC.
           05 CCR-PROV          PIC X(9).
           05 CCR-FILL          PIC X.
           05 CCR-RATE          PIC X(5).
           05 FILLER            PIC X(65).
      *
       FD  COMP-ELG
           RECORDING MODE IS F
           BLOCK CONTAINS 0 RECORDS
           LABEL RECORDS ARE STANDARD.

       01  COMP-ELG-REC.
           05 CER-PRSN          PIC X(12).
           05 FILLER            PIC X.
           05 CER-PROV          PIC X(9).
           05 FILLER            PIC X(58).

       FD  NEW-RATE
           RECORDING MODE IS F
           BLOCK CONTAINS 0 RECORDS
           LABEL RECORDS ARE STANDARD.

       01  NEW-RATE-REC         PIC X(80).

       WORKING-STORAGE SECTION.
       77  WKS-MESSAGE         PIC X(23) VALUE
                                   'WORKING-STORAGE SECTION'.

       77  CAP-READ               PIC 9(7) COMP-3 VALUE 0.
       77  ELG-READ               PIC 9(7) COMP-3 VALUE 0.
       77  NEW-RATE-RECS          PIC 9(7) COMP-3 VALUE 0.
       77  RATE-ZEROED            PIC 9(7) COMP-3 VALUE 0.
       77  TOT-MONEY              PIC 9(7)V99 COMP-3 VALUE 0.
      *
       01  MATCH-FILES.
           05 NEED-CAP              PIC X VALUE 'Y'.
           05 NEED-ELG              PIC X VALUE 'Y'.
           05 EOF-CAP               PIC X VALUE 'N'.
           05 EOF-ELG               PIC X VALUE 'N'.
           05 COMP-CAPP             PIC 9(9) VALUE ZEROS.
           05 COMP-ELIG             PIC 9(9) VALUE ZEROS.
      *
       01  NEW-RATE-REC-WORK.
           05 NRR-PROV          PIC X(9).
           05 FILLER            PIC X VALUE X'05'.
           05 NRR-PRSN          PIC X(12).
           05 FILLER            PIC X VALUE X'05'.
           05 NRR-RATE          PIC X(5).
           05 FILLER REDEFINES NRR-RATE.
              10 FILLER         PIC X.
              10 NRR-DLR        PIC 9.
              10 FILLER         PIC X.
              10 NRR-CENTS      PIC 99.
           05 FILLER            PIC X(52).
      *
       01  WORK-MONEY           PIC 9V99.
       01  WORK-MONEY-R REDEFINES WORK-MONEY.
           05 WM-DLR            PIC 9.
           05 WM-CENTS          PIC 99.
      *
       PROCEDURE DIVISION.
       010-OPEN-FILES.
           OPEN INPUT  COMP-CAP
                       COMP-ELG
                OUTPUT NEW-RATE.
      *
       020-READ-CAP-RECORDS.
           IF EOF-CAP = 'Y' OR
              NEED-CAP = 'N'
              GO TO 030-READ-ELG.
           READ COMP-CAP AT END
                MOVE 'Y' TO EOF-CAP
                MOVE 'N' TO NEED-CAP
                MOVE 999999999 TO COMP-CAPP
                MOVE ALL 'Z' TO COMP-CAP-REC
                GO TO 030-READ-ELG.
           IF CCR-PROV NOT NUMERIC
              DISPLAY 'CAP PROVIDER NOT NUMERIC - SKIPPED = '
                      COMP-CAP-REC
              GO TO 020-READ-CAP-RECORDS.
           MOVE CCR-PROV TO COMP-CAPP.
           ADD 1 TO CAP-READ.
           MOVE 'N' TO NEED-CAP.
      *
       030-READ-ELG.
           IF EOF-ELG = 'Y' OR
              NEED-ELG = 'N'
              GO TO 040-MATCH-FILES.
           READ COMP-ELG AT END
                MOVE 'Y' TO EOF-ELG
                MOVE 'N' TO NEED-ELG
                MOVE 999999999 TO COMP-ELIG
                MOVE ALL 'Z' TO COMP-ELG-REC
                GO TO 040-MATCH-FILES.
           IF CER-PROV NOT NUMERIC
              DISPLAY 'ELG PROVIDER NOT NUMERIc - SKIPPED'
              GO TO 030-READ-ELG.
           MOVE CER-PROV TO COMP-ELIG.
           ADD 1 TO ELG-READ.
           MOVE 'N' TO NEED-ELG.


       040-MATCH-FILES.
           IF EOF-CAP = 'Y' AND
              EOF-ELG = 'Y'
              GO TO 990-PUBLISH-STATS.
      *
           IF COMP-CAPP = COMP-ELIG GO TO 100-CAP-ELIG-MATCH.
      * these compares/comments change dependng on requirements.
           IF COMP-CAPP < COMP-ELIG GO TO 120-CAP-NOT-USED.
      *    IF COMP-CAPP < COMP-ELIG
      *       MOVE 'Y' TO NEED-CAP
      *       GO TO 020-READ-CAP-RECORDS.
           IF COMP-CAPP > COMP-ELIG GO TO 140-GET-RATE.
      *    IF COMP-CAPP > COMP-ELIG
      *       MOVE 'Y' TO NEED-ELG
      *       DISPLAY 'MISSING CLAIM DATA '
      *       GO TO 020-READ-CAP-RECORDS.

      *  WE SHOULD NOT BE ABLE TO GET HERE. . . .
           DISPLAY ' 040-MATCH-FILES FATAL ERROR'.
           DISPLAY ' CAP=' CCR-PROV ' ELIG=' CER-PROV.
           DISPLAY ' RUN TERMINATED.'.
           GOBACK.
      *
       100-CAP-ELIG-MATCH.
      * these may change depending on how duplicates are handled.
      *    MOVE 'Y' TO NEED-CAP, NEED-ELG.
           MOVE 'Y' TO NEED-ELG.
      *
           MOVE CER-PROV TO NRR-PROV.
           MOVE CER-PRSN TO NRR-PRSN.
           MOVE CCR-RATE TO NRR-RATE.
           MOVE NRR-DLR TO WM-DLR.
           MOVE NRR-CENTS TO WM-CENTS.
           COMPUTE TOT-MONEY = TOT-MONEY + WORK-MONEY.
           WRITE NEW-RATE-REC FROM NEW-RATE-REC-WORK.
           COMPUTE NEW-RATE-RECS = NEW-RATE-RECS + 1.
      *
           GO TO 020-READ-CAP-RECORDS.
      *
       120-CAP-NOT-USED.
           MOVE 'Y' TO NEED-CAP.
      *
      *    DISPLAY 'CAP RECORD NOT USED = ' COMP-CAP-REC.
      *
      *    MOVE CER-PROV TO NRR-PROV.
      *    MOVE CER-PRSN TO NRR-PRSN.
      *    MOVE CCR-RATE TO NRR-RATE.
      *    WRITE NEW-RATE-REC FROM NEW-RATE-REC-WORK.
      *    COMPUTE NEW-RATE-RECS = NEW-RATE-RECS + 1.
      *
           GO TO 020-READ-CAP-RECORDS.
      *
       140-GET-RATE.
           MOVE 'Y' TO NEED-ELG.
      *
           MOVE CER-PROV TO NRR-PROV.
           MOVE CER-PRSN TO NRR-PRSN.
           MOVE ' 0.00'  TO NRR-RATE.
           WRITE NEW-RATE-REC FROM NEW-RATE-REC-WORK.
           COMPUTE NEW-RATE-RECS = NEW-RATE-RECS + 1.
           COMPUTE RATE-ZEROED   = RATE-ZEROED   + 1.
      *
           GO TO 020-READ-CAP-RECORDS.
      *
       990-PUBLISH-STATS.
           DISPLAY 'CAP RECS READ = ' CAP-READ.
           DISPLAY 'ELG RECS READ = ' ELG-READ.
           DISPLAY 'NEW RECS      = ' NEW-RATE-RECS.
           DISPLAY 'ZEROED RATES  = ' RATE-ZEROED.
           DISPLAY 'TOTAL MONEY   = ' TOT-MONEY.
      *
       9999-STOP.
           CLOSE COMP-CAP COMP-ELG NEW-RATE.
           GOBACK.
Last edited by Anuj Dhawan on Tue Dec 02, 2008 10:57 pm, edited 1 time in total.
Regards,
Anuj

nrajini
Member
Posts: 23
Joined: Sun Oct 05, 2008 4:35 pm

Post by nrajini » Tue Dec 02, 2008 5:26 pm

Thanks
Regards,
Rajini

Anuj Dhawan
Moderator
Posts: 1625
Joined: Sat Aug 09, 2008 9:02 am
Location: Mumbai, India

Post by Anuj Dhawan » Tue Dec 02, 2008 10:55 pm

Hi,

Hopefully code had been helpful for you.. :)

have a good one,

-Ad

Post Reply

FREE TUTORIALS

Tutorials
Free tutorials from mainframegurukul
  • JCL Tutorial
    Covers all important JCL concepts.
  • Cobol Tutorial
    This tutorials covers all Cobol Topics from STRING to COMP-3.
  • DB2 Tutorial
    DB2 Tutorial focuses on DB2 COBOL Programming.
  • SORT Tutorial
    This Tutorial covers all important aspects of DFSORT with examples
  • CICS Tutorial
    This CICS tutorial covers CICS concepts and CICS Basics, CICS COBOL Programming.
Interview
Mainframe Interview questions



Other References
Mainframe Tools and others