Program ends with file-status = 46



Support for OS/VS COBOL, VS COBOL II, COBOL for OS/390 & VM and Enterprise COBOL for z/OS

Program ends with file-status = 46

Postby ranga_subham » Tue Jul 29, 2008 7:16 pm

Hi,

The below pasted cobol code is executing and ending with file status 46.

 ****** ***************************** Top of Data ******************************
 000001        IDENTIFICATION DIVISION.                                         
 000002        PROGRAM-ID. EXTBAC01.                                           
 000003                                                                         
 000004        ENVIRONMENT DIVISION.                                           
 000005        INPUT-OUTPUT SECTION.                                           
 000006        FILE-CONTROL.                                                   
 000007            SELECT I1-FILE ASSIGN TO I1FILE.                             
 000008            SELECT I2-FILE ASSIGN TO I2FILE.                             
 000009            SELECT O1-FILE ASSIGN TO O1FILE.                             
 000010                                                                         
 000011        DATA DIVISION.                                                   
 000012        FILE SECTION.                                                   
 000013        FD  I1-FILE                                                     
 000014            LABEL RECORDS ARE STANDARD                                   
 000015            RECORDING MODE IS F.                                         
 000016        01  I1-FILE-REC  PIC  X(80).                                     
 000017                                                                         
 000018        FD  I2-FILE                                                     
 000019            LABEL RECORDS ARE STANDARD                                   
 000020            RECORDING MODE IS F.                                         
 000021        01  I2-FILE-REC  PIC  X(1048).                                   
 000022                                                                         
 000023        FD  O1-FILE                                                     
 000024            LABEL RECORDS ARE STANDARD                                   
 000025            RECORDING MODE IS F.                                         
 000026        01  O1-FILE-REC  PIC  X(1048).                                   
 000027                                                                         
 000028        WORKING-STORAGE SECTION.                                         
 000029        01  WS-EOF-1             PIC  X(01) VALUE SPACE.                 
 000030        01  WS-EOF-2             PIC  X(01) VALUE SPACE.                 
 000031                                                                         
 000032        01  WS-IN1-REC.                                                 
 000033            05  WS-UNQ-NBR-1     PIC X(07)  VALUE SPACE.                 
 000034            05  FILLER           PIC X(73)  VALUE SPACE.                 
 000035                                                                         
 000036        01  WS-IN2-REC.                                                 
 000037            05  WS-REC-TYPE      PIC X(02)  VALUE SPACE.                 
 000038            05  FILLER           PIC X(03)  VALUE SPACE.                 
 000039            05  WS-UNQ-NBR-2     PIC X(07)  VALUE SPACE.                 
 000040            05  FILLER           PIC X(42)  VALUE SPACE.                 
 000041            05  WS-BAC           PIC X(06)  VALUE SPACE.                 
 000042            05  FILLER           PIC X(988) VALUE SPACE.                 
 000043                                                                         
 000044        PROCEDURE DIVISION.                                             
 000045        01-MAIN-PARA.                                                   
 000046            DISPLAY '01-MAIN-PARA'.                                     
 000047            PERFORM 02-OPEN-PARA.                                       
 000048            PERFORM 03-READ-PARA.                                       
 000049            PERFORM 04-READ-PARA.                                       
 000050            PERFORM 05-PERF-PARA  UNTIL WS-EOF-1 = 'Y'                   
 000051                                    AND WS-EOF-2 = 'Y'.                 
 000052            PERFORM 07-CLOS-PARA.                                       
 000053            STOP RUN.                                                   
 000054                                                                         
 000055        02-OPEN-PARA.                                                   
 000056            DISPLAY '02-OPEN-PARA'.                                     
 000057            OPEN INPUT  I1-FILE                                         
 000058                 INPUT  I2-FILE                                         
 000059                 OUTPUT O1-FILE.                                         
 000060                                                                         
 000061        03-READ-PARA.                                                   
 000062            DISPLAY '03-READ-PARA'.                                     
 000063            READ I1-FILE INTO WS-IN1-REC                                 
 000064              AT END MOVE 'Y'   TO WS-EOF-1                             
 000065                     MOVE SPACE TO WS-UNQ-NBR-1                         
 000066            END-READ.                                                   
 000067                                                                         
 000068        04-READ-PARA.                                                   
 000069            DISPLAY '04-READ-PARA'.                                     
 000070            READ I2-FILE INTO WS-IN2-REC                                 
 000071              AT END MOVE 'Y'   TO WS-EOF-2                             
 000072                     MOVE SPACE TO WS-UNQ-NBR-2                         
 000073            END-READ.                                                   
 000074                                                                         
 000075        05-PERF-PARA.                                                   
 000076            DISPLAY '05-PERF-PARA'.                                     
 000077            EVALUATE TRUE                                               
 000078                WHEN WS-UNQ-NBR-1 = WS-UNQ-NBR-2                         
 000079                     PERFORM 06-WRIT-PARA                               
 000080                     PERFORM 03-READ-PARA                               
 000081                     PERFORM 04-READ-PARA                               
 000082                WHEN WS-UNQ-NBR-1 < WS-UNQ-NBR-2                         
 000083                     DISPLAY 'LESS THAN KEY'                             
 000084                     PERFORM 03-READ-PARA                               
 000085                WHEN WS-UNQ-NBR-1 > WS-UNQ-NBR-2                         
 000086                     DISPLAY 'GREATER THAN KEY'                         
 000087                     PERFORM 04-READ-PARA                               
 000088            END-EVALUATE.                                               
 000089                                                                         
 000090        06-WRIT-PARA.                                                   
 000091            DISPLAY '06-WRIT-PARA'.                                     
 000092            MOVE SPACE       TO O1-FILE-REC                             
 000093            MOVE I2-FILE-REC TO O1-FILE-REC                             
 000094            WRITE O1-FILE-REC.                                           
 000095                                                                         
 000096        07-CLOS-PARA.                                                   
 000097            DISPLAY '06-CLOS-PARA'.                                     
 000098            CLOSE I1-FILE                                               
 000099                  I2-FILE                                               
 000100                  O1-FILE.                                               
 ****** **************************** Bottom of Data ****************************


Would you please suggest where I am wrong here.

Thanks.
ranga_subham
 
Posts: 279
Joined: Fri Jul 18, 2008 7:46 pm
Has thanked: 0 time
Been thanked: 1 time

Re: Program ends with file-status = 46

 

Re: Program ends with file-status = 46

Postby dick scherrer » Wed Jul 30, 2008 12:47 am

Hello,

Did you look at the documentation to learn what a 46 means?

Looking at the posted code, either read can fail trying to read after the end-of-file. If the eof indicator is already set, the read should not be issued.
Hope this helps,
d.sch.
User avatar
dick scherrer
Global moderator
 
Posts: 6304
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 91 times

Re: Program ends with file-status = 46

Postby jayind » Wed Jul 30, 2008 12:49 pm

Hi ranga_subham,

The code causing problem may be

PERFORM 05-PERF-PARA UNTIL WS-EOF-1 = 'Y'
AND WS-EOF-2 = 'Y'.


Since you have an AND between the two file status, even after encouter of EOF of one file it is trying to perform the same logic again since the other file EOF is not yet reached.. Try replacing with OR instead of AND..

PERFORM 05-PERF-PARA UNTIL WS-EOF-1 = 'Y'
OR WS-EOF-2 = 'Y'.


This may work!!

Regards,
Jayind
jayind
 
Posts: 62
Joined: Wed Apr 23, 2008 1:37 pm
Location: Chennai, India
Has thanked: 0 time
Been thanked: 0 time

Re: Program ends with file-status = 46

Postby ranga_subham » Wed Jul 30, 2008 1:54 pm

Or condition won't work because as soon as it reads the end of first file it will stop processing the second file. I am trying to achieve the following with my program.

1). Read a record from first file
2). Read the second file
3). If key matches then write the record from 2nd file to output file
4). I would still want to continue reading the second file to see if there are any other records with the same key, If so, then I will have to write that record from 2nd file to output.

I have sorted both the files on ascending order and given as input.

Would you please tell me where I am wrong in my logic? Or, please suggest me the code required.

Thanks.
ranga_subham
 
Posts: 279
Joined: Fri Jul 18, 2008 7:46 pm
Has thanked: 0 time
Been thanked: 1 time

Re: Program ends with file-status = 46

Postby jayind » Wed Jul 30, 2008 3:18 pm

In your code below

000061        03-READ-PARA.                                                   
000062            DISPLAY '03-READ-PARA'.                                     
000063            READ I1-FILE INTO WS-IN1-REC                                 
000064              AT END MOVE 'Y'   TO WS-EOF-1                             
000065                     MOVE SPACE TO WS-UNQ-NBR-1                         
000066            END-READ.                                                   
000067                                                                         
000068        04-READ-PARA.                                                   
000069            DISPLAY '04-READ-PARA'.                                     
000070            READ I2-FILE INTO WS-IN2-REC                                 
000071              AT END MOVE 'Y'   TO WS-EOF-2                             
000072                     MOVE SPACE TO WS-UNQ-NBR-2                         
000073            END-READ.                                                   
000074                                                                         
000075        05-PERF-PARA.                                                   
000076            DISPLAY '05-PERF-PARA'.                                     
000077            EVALUATE TRUE                                               
000078                WHEN WS-UNQ-NBR-1 = WS-UNQ-NBR-2                         
000079                     PERFORM 06-WRIT-PARA                               
000080                     PERFORM 03-READ-PARA                               
000081                     PERFORM 04-READ-PARA                               
000082                WHEN WS-UNQ-NBR-1 < WS-UNQ-NBR-2                         
000083                     DISPLAY 'LESS THAN KEY'                             
000084                     PERFORM 03-READ-PARA                               
000085                WHEN WS-UNQ-NBR-1 > WS-UNQ-NBR-2                         
000086                     DISPLAY 'GREATER THAN KEY'                         
000087                     PERFORM 04-READ-PARA                               
000088            END-EVALUATE.                               



I have noticed the following issues...

1. in 03-READ-PARA: You are not checking the file status before READ because if already EOF encountered then you still try to read which cause problem
2. in 04-READ-PARA: Same issue as above.

So have a file status check before read to avoid this

3. in 05-PERF-PARA: In the file read you already moved spaces to WS-UNQ-NBR field when encountered EOF. Assume that file1 reached EOF, but in the Evaluate you are comparing
WS-UNQ-NBR-1 < WS-UNQ-NBR-2 in which WS-UNQ-NBR-1 already has spaces so always less than WS-UNQ-NBR-2 and you are trying to read file1 again which cause problem.
If you wouldnt have got the logic error it would have run into infinite loop..
So correct the above and try again..

Hope this helps..

Regards,
Jayind
jayind
 
Posts: 62
Joined: Wed Apr 23, 2008 1:37 pm
Location: Chennai, India
Has thanked: 0 time
Been thanked: 0 time

Re: Program ends with file-status = 46

Postby dick scherrer » Thu Jul 31, 2008 12:21 am

Hello,

Please re-read my earlier reply. . .

The code needs to be changed so that the READs will NOT happen if that file has already reached eof. This can be accomplished by simply testing in each read paragraph for eof BEFORE issuing the read. . .

What you are processing is the "classic" 2-file match/merge. I have just added a "Sticky" to the COBOL part of the forum that contains working sample code. That code is currently working in producton many places.

If you see something in the code that is not clear, please reply back here.
Hope this helps,
d.sch.
User avatar
dick scherrer
Global moderator
 
Posts: 6304
Joined: Sat Jun 09, 2007 8:58 am
Has thanked: 3 times
Been thanked: 91 times

Re: Program ends with file-status = 46

Postby ranga_subham » Thu Jul 31, 2008 12:43 am

Thank you people.
ranga_subham
 
Posts: 279
Joined: Fri Jul 18, 2008 7:46 pm
Has thanked: 0 time
Been thanked: 1 time


Return to IBM Cobol

 


  • Related topics
    Replies
    Views
    Last post