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 

File closing in cobol

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


Joined: 19 Dec 2005
Posts: 8
Topics: 5

PostPosted: Thu Jun 22, 2006 1:01 am    Post subject: File closing in cobol Reply with quote

Hi,

i have a doubt like, i have a file opened in extended mode and i am writing some records into that file using a program. in case of an abend while the execution the file is closed automatically when the program closes, so all the newly witten records will be there in the file. but i do not want this like this.. i do not want that file to close automatically when the prog closes because of an abend,so that the changes made to that file using that prog will not reflect. is ther any way to do that.

for an example.

i have a file with 100 recs and i am opeing it in Extended mode and adding some more recodes using a prog, while execution if there is an abend in the prog all the newly added rec should go off and the file should have only those old 100 rec.

is there a way to do this. Please help me in this.

Rajkumar
Back to top
View user's profile Send private message Send e-mail Yahoo Messenger
shekar123
Advanced


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

PostPosted: Thu Jun 22, 2006 2:40 am    Post subject: Reply with quote

Rajkumar,

I have tried a sample code and see if my understanding is correct.
Try this code:
Code:

       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID.    RAJPGM.                                           
       AUTHOR.        SHEKAR.                                           
       DATE-WRITTEN.  01/06/2006.                                       
       DATE-COMPILED. 01/06/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-FILE   ASSIGN TO INFILE                         
                  FILE STATUS IS INPUT-FILE-STATUS.                     
           SELECT REPORT-FILE   ASSIGN TO RPTFILE                       
                  FILE STATUS IS REPORT-FILE-STATUS.                   
       DATA DIVISION.                                                   
       FILE SECTION.                                                   
       FD  INPUT-FILE                                                   
           RECORDING MODE IS F                                         
           BLOCK CONTAINS 0 CHARACTERS                                 
           DATA RECORD IS INPUT-REC.                                   
                                                                       
       01 INPUT-REC.                                                   
          05 FILLER                PIC X(80).                           
                                                                       
       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               PIC X(80) VALUE SPACES.             
       01 WS-COUNT                 PIC S9(04) COMP VALUE +0.           
                                                                       
       01  WS-FILE-STATS.                                               
           05  INPUT-FILE-STATUS             PIC  X(02) VALUE ZERO.     
               88 INPUT-FILE-IO-OKAY      VALUE '00'.                   
               88 INPUT-FILE-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-EOF-SWITCH            PIC X(01) VALUE SPACE.       
              88 INPUT-NOT-EOF            VALUE 'Y'.                   
              88 INPUT-EOF                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 RAJPGM'.                                   
                                                                       
           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 RAJPGM'.                                 
                                                                       
       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-FILE.                                       
           EVALUATE INPUT-FILE-STATUS                                   
              WHEN '00'                                                 
                   CONTINUE                                             
              WHEN OTHER                                               
                   DISPLAY '*********** ERROR *******************'     
                   MOVE '100:OPEN FAILED FOR INPUT-FILE' TO ABEND-MSG   
                   MOVE INPUT-FILE-STATUS                TO ABEND-STATUS
                   DISPLAY "*********** ERROR *******************"     
                   PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT   
           END-EVALUATE.                                               
                                                                       
           OPEN EXTEND 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-FILE.                                             
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  200-PROCESS-DATA                                   *
      ******************************************************************
      D    DISPLAY '110-READ-INPUT-FILE'.                               
                                                                       
           INITIALIZE INPUT-REC.                                       
                                                                       
           READ INPUT-FILE                                             
           AT END                                                       
                SET INPUT-EOF TO TRUE                                   
           NOT AT END                                                   
                IF INPUT-FILE-STATUS IS EQUAL TO '00'                   
                   CONTINUE                                             
                ELSE                                                   
                   MOVE '110:READ FAILED FOR INPUT FILE' TO ABEND-MSG   
                   MOVE INPUT-FILE-STATUS   TO ABEND-STATUS             
                   PERFORM 999-ABEND-ERROR  THRU 999-ABEND-ERROR-EXIT   
                END-IF                                                 
           END-READ.                                                   
           ADD +1 TO WS-COUNT.                                         
      D    DISPLAY '110-READ-INPUT-FILE-EXIT'.                         
       110-READ-INPUT-FILE-EXIT.                                       
           EXIT.                                                       
                                                                       
       200-PROCESS-DATA.                                               
      ******************************************************************
      * THIS PROCEDURE CONTROLS THE MAIN PROCESS                       *
      * CALLS:                                                         *
      * CALLED BY:  000-MAINLINE                                       *
      ******************************************************************
      D    DISPLAY '200-PROCESS-DATA'.                                 
                                                                       
           SET     INPUT-NOT-EOF       TO TRUE.                         
           PERFORM 110-READ-INPUT-FILE THRU 110-READ-INPUT-FILE-EXIT.   
                                                                       
           PERFORM UNTIL INPUT-EOF                                     
                   MOVE INPUT-REC TO REPORT-REC                         
                   WRITE REPORT-LINE FROM REPORT-REC                   
                   IF WS-COUNT = 4                                     
                      PERFORM 999-ABEND-ERROR  THRU                     
                              999-ABEND-ERROR-EXIT                     
                   END-IF                                               
                   PERFORM 110-READ-INPUT-FILE THRU                     
                           110-READ-INPUT-FILE-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-FILE.                                           
           IF INPUT-FILE-IO-OKAY                                       
              CONTINUE                                                 
           ELSE                                                         
              DISPLAY '************************************'           
              MOVE '800: CLOSE FAILED FOR INPUT FILE' TO ABEND-MSG     
              MOVE INPUT-FILE-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 '300-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 'RAJPGM   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.                                                   

My assumption is i had an input file SHEKAR.TEST.IN from which i am reading records one by one and appending records to an output file SHEKAR.TEST.OUT in which there are already 5 records present.What exactly i am doing is after i read 4 records from the input file i am terminating the program and the only 4 records are appended to the output file (total beocmes 9 ).I am assuming you do not want the 4 records to be appended to the output file and u want the original records 5 in the output file.
Code:

SHEKAR.TEST.IN

000001 SHEKAR              ENGL
000002 KOLUSU              COMP
000003 FRANK               ENGL
000004 MFUSER              ENGL
000005 BPRASANNA           COMP
000006 BEEBOP              PHYC
000007 RAJ                 ENGL
000008 MERVYN              COMP
000009 MVSFORUMS           ENGL
000010 MAINFRAME           ENGL

SHEKAR.TEST.OUT BEFORE

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       

SHEKAR.TEST.OUT AFTER

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       
000006 SHEKAR              ENGL                                               
000007 KOLUSU              COMP                                               
000008 FRANK               ENGL                                               
000009 MFUSER              ENGL               

RC=0 SYSOUT
*************ERROR*********************                                         
RAJPGM   ENCOUNTERED A FATAL ERROR                                             
                                                                               
ABEND-STATUS =                                                                 
                                 

_________________
Shekar
Grow Technically
Back to top
View user's profile Send private message
rajkumarfit
Beginner


Joined: 19 Dec 2005
Posts: 8
Topics: 5

PostPosted: Thu Jun 22, 2006 4:33 am    Post subject: Reply with quote

hi Thanks for ur quick reply,

Actually i do not want that 4 recs to be added in the out file. i just want the old 5 recs in the out file if there is an abend. But in ur output after the Execution the 4 recs are added even after the abend.

Rajkuamr
Back to top
View user's profile Send private message Send e-mail Yahoo Messenger
kolusu
Site Admin
Site Admin


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

PostPosted: Thu Jun 22, 2006 7:15 am    Post subject: Reply with quote

rajkumarfit,

Unless you use checkpoint-restart feature there is no way to do what you are asking for. Just curious why do you need to open the dataset in an extended mode?

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: Thu Jun 22, 2006 7:18 am    Post subject: Reply with quote

Rajkumar,

Try this code modified by me with two test cases:
1.Case 1 with an abend condition so records will not appended to the output file and i am assuming that after reading 4 records from the input file abend would occur.
2.Case 2 without an abend condition so records will be appended to the output file and i am commenting out the condition that after reading 4 records from the input file abend would not occur.
Code:

       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID.    RAJPGM.                                           
       AUTHOR.        SHEKAR.                                           
       DATE-WRITTEN.  01/06/2006.                                       
       DATE-COMPILED. 01/06/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-FILE   ASSIGN TO INFILE                         
                  FILE STATUS IS INPUT-FILE-STATUS.                     
           SELECT REPORT-FILE   ASSIGN TO RPTFILE                       
                  FILE STATUS IS REPORT-FILE-STATUS.                   
       DATA DIVISION.                                                   
       FILE SECTION.                                                   
       FD  INPUT-FILE                                                   
           RECORDING MODE IS F                                         
           BLOCK CONTAINS 0 CHARACTERS                                 
           DATA RECORD IS INPUT-REC.                                   
                                                                       
       01 INPUT-REC.                                                   
          05 FILLER                PIC X(80).                           
                                                                       
       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               PIC X(80) VALUE SPACES.             
       01 WS-COUNT                 PIC S9(04) COMP VALUE +0.           
       01 WS-IDX                   PIC S9(04) COMP VALUE 1.             
                                                                       
       01  WS-FILE-STATS.                                               
           05  INPUT-FILE-STATUS             PIC  X(02) VALUE ZERO.     
               88 INPUT-FILE-IO-OKAY         VALUE '00'.               
               88 INPUT-FILE-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-EOF-SWITCH            PIC X(01) VALUE SPACE.       
              88 INPUT-NOT-EOF            VALUE 'Y'.                   
              88 INPUT-EOF                VALUE 'N'.                   
           05 ABEND-FLAG-SWITCH           PIC X(01) VALUE SPACE.       
              88 ABEND-FLAG-NOT           VALUE 'Y'.                   
              88 ABEND-FLAG               VALUE 'N'.                   
                                                                       
       01  WS-LITERALS.                                                 
           05 ABEND-MSG                PIC X(80).                       
           05 ABEND-STATUS             PIC X(02).                       
                                                                       
      ******************************************************************
      * INTERNAL TABLE USED FOR STORING DATA   *
      ******************************************************************
       01 WS-TABLE.                                                     
          05 WS-CNT                   PIC S9(04) COMP VALUE 0.         
          05 WS-MAX-CNT               PIC S9(04) COMP VALUE 50.         
          05 WS-ENTRY                 OCCURS 50  TIMES.                 
             10 WS-TABLE-RECORD       PIC X(80)  VALUE SPACES.         
                                                                       
       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 RAJPGM'.                                   
                                                                       
           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 RAJPGM'.                         
                                                                       
       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-FILE.                                       
           EVALUATE INPUT-FILE-STATUS                                   
              WHEN '00'                                                 
                   CONTINUE                                             
              WHEN OTHER                                               
                   DISPLAY '*********** ERROR *******************'     
                   MOVE '100:OPEN FAILED FOR INPUT-FILE' TO ABEND-MSG   
                   MOVE INPUT-FILE-STATUS                TO ABEND-STATUS
                   DISPLAY "*********** ERROR *******************"     
                   PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT   
           END-EVALUATE.                                               
                                                                       
           OPEN EXTEND 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-FILE.                                             
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  200-PROCESS-DATA                                   *
      ******************************************************************
      D    DISPLAY '110-READ-INPUT-FILE'.                               
                                                                       
           INITIALIZE INPUT-REC.                                       
                                                                       
           READ INPUT-FILE                                             
           AT END                                                       
                SET INPUT-EOF TO TRUE                                   
           NOT AT END                                                   
                IF INPUT-FILE-STATUS IS EQUAL TO '00'                   
                   CONTINUE                                             
                ELSE                                                   
                   MOVE '130:READ FAILED FOR INPUT FILE' TO ABEND-MSG   
                   MOVE INPUT-FILE-STATUS   TO ABEND-STATUS             
                   PERFORM 999-ABEND-ERROR  THRU 999-ABEND-ERROR-EXIT   
                END-IF                                                 
           END-READ.                                                   
           ADD +1 TO WS-COUNT.                                         
                                                                       
      D    DISPLAY '110-READ-INPUT-FILE-EXIT'.                         
       110-READ-INPUT-FILE-EXIT.                                       
           EXIT.                                                       
                                                                       
       200-PROCESS-DATA.                                               
      ******************************************************************
      * THIS PROCEDURE CONTROLS THE MAIN PROCESS                       *
      * CALLS:                                                         *
      * CALLED BY:  000-MAINLINE                                       *
      ******************************************************************
      D    DISPLAY '200-PROCESS-DATA'.                                 
                                                                       
           SET     INPUT-NOT-EOF       TO TRUE.                         
           SET     ABEND-FLAG-NOT      TO TRUE.                         
           PERFORM 110-READ-INPUT-FILE THRU 110-READ-INPUT-FILE-EXIT.   
                                                                       
           PERFORM UNTIL INPUT-EOF                                     
                   ADD +1 TO WS-CNT                                     
                   IF WS-CNT > WS-MAX-CNT                               
                      MOVE '200: NOT PROCESSED TABLE CAPACITY EXCEEDED'
                           TO ABEND-MSG                                 
                      PERFORM 999-ABEND-ERROR  THRU                     
                              999-ABEND-ERROR-EXIT                     
                   END-IF                                               
                                                                       
                   MOVE INPUT-REC TO WS-TABLE-RECORD(WS-CNT)           
                   IF WS-COUNT = 4                                     
                      DISPLAY 'THINK ABEND OCCURED'                     
                      SET ABEND-FLAG TO TRUE                           
                      PERFORM 999-ABEND-ERROR THRU                     
                              999-ABEND-ERROR-EXIT                     
                   END-IF                                               
                   PERFORM 110-READ-INPUT-FILE THRU                     
                           110-READ-INPUT-FILE-EXIT                     
           END-PERFORM.                                                 
                                                                       
           IF ABEND-FLAG                                               
              NEXT SENTENCE                                             
           ELSE                                                         
              PERFORM 250-APPEND-PARA THRU                             
                      250-APPEND-PARA-EXIT                             
           END-IF.                                                     
                                                                       
      D    DISPLAY '200-PROCESS-DATA-EXIT'.                             
       200-PROCESS-DATA-EXIT.                                           
           EXIT.                                                       
                                                                       
       250-APPEND-PARA.                                                 
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  200-PROCESS-DATA                                   *
      ******************************************************************
      D    DISPLAY '250-APPEND-PARA'.                                   
                                                                       
           PERFORM UNTIL WS-IDX > WS-CNT                               
                   INITIALIZE REPORT-REC                               
                   MOVE WS-TABLE-RECORD(WS-IDX) TO REPORT-REC           
                   ADD +1  TO WS-IDX                                   
                   WRITE REPORT-LINE            FROM REPORT-REC         
           END-PERFORM.                                                 
                                                                       
      D    DISPLAY '250-APPEND-PARA-EXIT'.                             
       250-APPEND-PARA-EXIT.                                           
           EXIT.                                                       
                                                                       
       300-FINISH.                                                     
      ******************************************************************
      * THIS PROCEDURE                                                 *
      * CALLS:                                                         *
      * CALLED BY:  000-MAINLINE                                       *
      ******************************************************************
      D    DISPLAY '300-FINISH'.                                       
                                                                       
           CLOSE INPUT-FILE.                                           
           IF INPUT-FILE-IO-OKAY                                       
              CONTINUE                                                 
           ELSE                                                         
              DISPLAY '************************************'           
              MOVE '800: CLOSE FAILED FOR INPUT FILE' TO ABEND-MSG     
              MOVE INPUT-FILE-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 '300-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 'RAJPGM   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.                                                   

TEST CASE 1
Code:

SHEKAR.TEST.IN

000001 SHEKAR              ENGL
000002 KOLUSU              COMP
000003 FRANK               ENGL
000004 MFUSER              ENGL
000005 BPRASANNA           COMP
000006 BEEBOP              PHYC
000007 RAJ                 ENGL
000008 MERVYN              COMP
000009 MVSFORUMS           ENGL
000010 MAINFRAME           ENGL

SHEKAR.TEST.OUT BEFORE

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       

SHEKAR.TEST.OUT AFTER

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       

SYSOUT RC=0
THINK ABEND OCCURED                                                             
*************ERROR*********************                                         
RAJPGM   ENCOUNTERED A FATAL ERROR                                             
                                                                               
ABEND-STATUS =                                                                     

TEST CASE 2
Code:

SO YOU COMMENT OUT THE CODE FOR TEST CASE 2 TO MEET THE CRITERIA

*            IF WS-COUNT = 4                                     
*               DISPLAY 'THINK ABEND OCCURED'                     
*               SET ABEND-FLAG TO TRUE                           
*               PERFORM 999-ABEND-ERROR THRU                     
*                       999-ABEND-ERROR-EXIT                     
*            END-IF 

SHEKAR.TEST.IN

000001 SHEKAR              ENGL
000002 KOLUSU              COMP
000003 FRANK               ENGL
000004 MFUSER              ENGL
000005 BPRASANNA           COMP
000006 BEEBOP              PHYC
000007 RAJ                 ENGL
000008 MERVYN              COMP
000009 MVSFORUMS           ENGL
000010 MAINFRAME           ENGL

SHEKAR.TEST.OUT BEFORE

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       

SHEKAR.TEST.OUT AFTER

000001 1                                                                       
000002 2                                                                       
000003 3                                                                       
000004 4                                                                       
000005 5                                                                       
000006 SHEKAR              ENGL                                               
000007 KOLUSU              COMP                                               
000008 FRANK               ENGL                                               
000009 MFUSER              ENGL                                               
000010 BPRASANNA           COMP                                               
000011 BEEBOP              PHYC                                               
000012 RAJ                 ENGL                                               
000013 MERVYN              COMP                                               
000014 MVSFORUMS           ENGL                                               
000015 MAINFRAME           ENGL                                                   

_________________
Shekar
Grow Technically
Back to top
View user's profile Send private message
sriramla
Beginner


Joined: 22 Feb 2003
Posts: 74
Topics: 1

PostPosted: Thu Jun 22, 2006 8:12 am    Post subject: Reply with quote

I understand you want to save the appended records if job goes fine. When job abends, you would like to 'rollback' the changes made to the file. In this situation, I would do this:

1. Write the output in a new file
2. If job ends normally, next step in the job will concatenate original file & new file from step 1 to the final output file.
3. If needed, rename the final output file to the orignal file (In effect, you have 'appended' the new records to the file if job runs with no abends).

Note that if job abends then you should not run the concatenate step thereby you have the old file contents as is.
Back to top
View user's profile Send private message
calspach
Beginner


Joined: 12 Jun 2006
Posts: 5
Topics: 0

PostPosted: Thu Jun 22, 2006 8:39 am    Post subject: Reply with quote

^^ That's what I would do too.
Back to top
View user's profile Send private message
Bithead
Advanced


Joined: 03 Jan 2003
Posts: 550
Topics: 23
Location: Michigan, USA

PostPosted: Thu Jun 22, 2006 12:22 pm    Post subject: Reply with quote

Try writing them to a temporary dataset in your program then, at the end of the program, read them in and write them to your permenant dataset.
Back to top
View user's profile Send private message
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