Sunteți pe pagina 1din 12

Handling Variable Length Sequential file

Target readers

All.

Keywords

Mainframe.
Introduction
The following is a sample program for handling Variable Length
Sequential file.
This program demonstrates how to convert a Fixed Length Sequential
file to a Variable Length Sequential File. The check points in the
program are highlighted. Please make a note of these. After the
program, Please check the JCL which runs the program.

Program: VARLENFL
000100 IDENTIFICATION DIVISION. 00010014
000200 PROGRAM-ID. VARLENFL. 00020099
000300 AUTHOR. INFOSYS. 00030014
000400 DATE-WRITTEN. 07/11/2007. 00040099
000500 DATE-COMPILED. 00050014
000600 00060014
000700******************************************************************00070014
000800* *00080014
000900* TITLE : HANDLING VARIABLE LENGTH OUTPUT FILE. *00090099
000911* OR *00091199
000912* CONVERSION FROM FIXED LENGTH FILE TO VARIABLE *00091299
000913* LENGTH FILE. *00091399
000914* *00091499
000920* DESCRIPTION : THIS PROGRAM DEMONSTRATES THE BASIC HANDLING OF *00092099
000930* VARIABLE LENGTH OUTPUT FILE. *00093099
000940* IN THIS PROGRAM WE HAVE A INPUT FILE INPUTFL *00094099
000950* WHICH IS OF FB TYPE AND THE OUTPUT FILE IS OF *00095099
000960* VB TYPE. BOTH ARE SEQUENTIAL FILES. OUR INTENTION*00096099
000970* IS TO TAKE ONE RECORD AT A TIME FROM THE INPUT *00097099
000980* FILE, REMOVE THE TRAILING SPACES FROM THE RECORD *00098099
000990* AND WRITING IT INTO THE OUTPUT FILE. THIS PROCESS*00099099
001000* WILL BE REPEATED FOR ALL THE RECORD OF THE INPUT *00100099
001100* FILE. AT THE END OF THE PROCESS WE WILL HAVE ONE *00110099
001200* VARIABLE LENFTH OUTPUT FILE, WHICH WILL HAVE THE *00120099
001300* SAME RECORD AS THE INPUT FILE. *00130099
001400* *00140099
002500* TYPE : BATCH *00250014
002600* *00260014
002700******************************************************************00270014
002800 00280014
002900******************************************************************00290014
003000* M O D I F I C A T I O N L O G *00300014
003100* - - - - - - - - - - - - - - - *00310014
003200*================================================================*00320014
003300* VERSION | DATE | WRITTEN BY | DESCRIPTION *00330014
003400*-----------|-----------|-------------|--------------------------*00340014
003500* | | | *00350014
003600* 1.00 | 08/10/2007| INFOSYS | BASE VERSION *00360099
003700******************************************************************00370014
003800 00380014
003900******************************************************************00390014
004000* P R O G R A M P A R A M E T E R S *00400014
004100* - - - - - - - - - - - - - - - - - *00410014
004200*================================================================*00420014
004300* *00430014
004400* I. CALLING PROGRAMS *00440014
004500* ------- -------- *00450014
004600* NONE (SUBMITTED THROUGH A JCL) *00460014
004700* *00470014
004800* II. CALLED PROGRAMS *00480014
004900* ------ -------- *00490014
005000* 1. SPZBERR - ERROR LOGGING PROGRAM(CALL) *00500014
005100* *00510014
005200* III.COPYBOOKS USED *00520014
005300* --------- ---- *00530014
005400* 1. BSPZBERR - COPYBOOK FOR ERROR LOGGING PROGRAM *00540014
005700* *00570014
005800* IV. DB2 TABLES ACCESSED *00580014
005900* --- ------ -------- *00590014
006000* NONE. *00600099
006300* *00630014
006400* V. FILES ACCESSED *00640014
006500* ----- -------- *00650014
006600* 1. INPUTFL - DOCS DATA FILE *00660099
006700* ACCESS MODE - INPUT *00670014
006800* COPYBOOK - NA *00680099
006900* *00690014
007000* 2. OUTPUTFL - DOCS FILE IN GOIP FORMAT *00700099
007100* ACCESS MODE - OUTPUT *00710014
007200* COPYBOOK - NA *00720015
007300* *00730014
008200******************************************************************00820014
008300 00830014
008400******************************************************************00840014
008500* ENVIRONMENT DIVISION *00850014
008600******************************************************************00860014
008700 00870014
008800 ENVIRONMENT DIVISION. 00880014
008900 00890014
009000 INPUT-OUTPUT SECTION. 00900014
009100 00910014
009200 FILE-CONTROL. 00920014
009300 00930014
009400 SELECT INPUTFL ASSIGN 00940099
009500 TO INPUTFL 00950099
009600 ORGANIZATION IS SEQUENTIAL 00960014
009700 ACCESS MODE IS SEQUENTIAL 00970014
009800 FILE STATUS IS WF-INPUTFL-STATUS. 00980099
009900 00990014
010000 SELECT OUTPUTFL ASSIGN 01000099
010100 TO OUTPUTFL 01010099
010200 ORGANIZATION IS SEQUENTIAL 01020014
010300 ACCESS MODE IS SEQUENTIAL 01030014
010400 FILE STATUS IS WF-OUTPUTFL-STATUS. 01040099
011700 01170014
011800******************************************************************01180014
011900* DATA DIVISION *01190099
012000******************************************************************01200014
012100 01210014
012200 DATA DIVISION. 01220014
012300 01230014
012400******************************************************************01240014
012500* FILE SECTION BEGIN *01250099
012600******************************************************************01260014
012700 01270014
012800 FILE SECTION. 01280014
012900 01290014
013000** INPUT FILE: 01300099
013100*************** 01310099
013200 01320014
013300 FD INPUTFL 01330099
013400 RECORDING MODE IS F 01340014
013500 BLOCK CONTAINS 0 RECORDS. 01350014
013600 01360014
013700 01 FS-INPUTFL-RECORD PIC X(1000). 01370099
013800 01380014
013900** OUTPUT FILE: 01390099
014000**************** 01400099
014100 01410014
014110** NOTE:1 FOR THE OUTPUT FILE WE ARE DECLARING THE MAXIMUM LENGTH 01411099
014120** OF THE OUTPUT FILE AS THE RECORD LENGTH OF THE INPUT FILE 01412099
014130 01413099
014140** NOTE:2 IF YOU HAVE A VARIABLE LENGTH RECORD FORMAT DEFINED 01414099
014150** FOR THE FILE, THEN THE FIRST 4 BYTES OF THE RECORD WILL 01415099
014160** STORE THE LENGTH OF THE RECORD. SO YOU NEED TO MOVE IN 01416099
014170** THE LENGTH OF RECORD TO THE FIRST 4 BYTES AND THEN THE 01417099
014180** ACTUAL RECORD. CHOOSE A WS VARIABLE WITH THE LARGEST 01418099
014190** RECORD LENGTH AND MOVE THE LENGTH OF THE RECORD YOU ARE 01419099
014191** GOING TO WRITE IN THE OUTPUT FILE. CHECK THE USE OF 01419199
014192** WA-OUTPUTFL-RECORD-LEN BELOW 01419299
014193 01419399
014200 FD OUTPUTFL 01420099
014300 RECORDING MODE IS V 01430027
014400 BLOCK CONTAINS 0 RECORDS. 01440014
014500 01450014
014610 FS-OUTPUTFL-RECORD. 01461099
014700 05 FILLER PIC X(01) 01470099
014710 OCCURS 1 TO 1000 TIMES 01471099
014800 DEPENDING ON 01480032
016600 WA-OUTPUTFL-RECORD-LEN. 01660099
016700******************************************************************01670014
016800* FILE SECTION END *01680099
016900******************************************************************01690014
017000 01700014
017100******************************************************************01710014
017200* W O R K I N G S T O R A G E B E G I N *01720099
017300******************************************************************01730014
017400 01740014
017500 WORKING-STORAGE SECTION. 01750056
017600 01760014
018000 01 WS-WORKING-STORAGE-VARIABLES. 01800014
018100 01810099
018110***************************C O U N T E R S************************01811099
018120 01812099
018130 05 WA-COUNTERS. 01813099
018140 01814099
018180 10 WA-OUTPUTFL-RECORD-LEN 01818099
018190 PIC S9(04) COMP 01819099
018191 VALUE ZEROES. 01819199
018197 01819799
018200********************** C O N S T A N T S *************************01820014
018210 01821099
018300 05 WC-CONSTANTS. 01830014
018500 10 WC-SPZBERR PIC X(08) VALUE 'SPZBERR'. 01850014
018600 01860014
018700** THIS PROGRAM'S NAME 01870014
018800 10 WC-VARLENFL PIC X(06) VALUE 'VARLENFL'. 01880099
018900 01890014
019000** FILENAME CONSTANTS 01900014
019100 10 WC-INPUTFL PIC X(08) VALUE 'INPUTFL'. 01910099
019200 10 WC-OUTPUTFL PIC X(08) VALUE 'OUTPUTFL'. 01920099
019300 01930029
019600** NUMERIC CONSTANTS 01960099
019700 10 WC-FATAL-ERROR PIC 9(02) VALUE 16. 01970014
019993 01999350
020000**************************** F L A G S ***************************02000014
020100 02010014
020200 05 WF-FLAGS. 02020014
020300 02030014
020400 10 WF-INPUTFL-STATUS PIC 9(02). 02040099
020500 88 INPUTFL-OK VALUE 00. 02050099
020600 88 INPUTFL-END-OF-FILE VALUE 10. 02060099
020700 02070014
020800 10 WF-OUTPUTFL-STATUS PIC 9(02). 02080099
020900 88 OUTPUTFL-OK VALUE 00. 02090099
021000 88 OUTPUTFL-END-OF-FILE VALUE 10. 02100099
024694 02469499
024700********************* S A V E A R E A S *************************02470014
024800 02480014
024900 05 WS-SAVE-AREAS. 02490014
025000 02500014
027010 10 WS-GOIP-REC. 02701099
027011 02701199
027012 15 WS-LET-ID PIC 9(03) VALUE 111. 02701299
027013 15 WS-LET-REC PIC X(3324) VALUE SPACES. 02701399
027014 02701499
027080********************* I N D E X ******************************** 02708099
027090 02709038
027091 05 WX-INDICES. 02709138
027092 02709238
027093 10 WX-INDEX PIC S9(04) COMP. 02709338
027094 02709499
027100*********************** C O P Y B O O K S ************************02710014
027200 02720014
027300** COPYBOOK FOR SPZBERR - ERROR LOGGING PROGRAM 02730014
027400 01 SPZBERR-PARAMETER-BLOCK. 02740014
027500 COPY BSPZBERR. 02750014
027600 02760014
029700******************************************************************02970014
029800* W O R K I N G S T O R A G E E N D *02980014
029900******************************************************************02990014
030393******************************************************************03039399
030394* P R O C E D U R E D I V I S I O N *03039499
030395******************************************************************03039599
030396 03039699
030397 PROCEDURE DIVISION 03039799
030900 03090014
031000 A00000-MAIN SECTION. 03100014
031100 03110014
031200******************************************************************03120014
031300* FUNCTION: INITIALISES ALL THE COPYBOOK AND WORKING STORAGE *03130014
031400* VARIABLES FOLLOWED BY THE MAIN LOGIC OF THE PROGRAM. *03140014
031500* TERMINATES THE BATCH PROGRAM. *03150014
031600******************************************************************03160014
031700 03170014
031800 PERFORM A10000-INITIALISE 03180020
031820 03182054
031900 PERFORM B10000-MAIN-PROCESS 03190014
031910 03191054
032000 PERFORM C10000-TERMINATION 03200014
032010 . 03201054
032200 A00000-EXIT. 03220014
032300 GOBACK 03230014
032400 . 03240014
032500 03250014
032600 A10000-INITIALISE SECTION. 03260014
032700 03270014
032800******************************************************************03280014
032900* FUNCTION: INITIALISES THE WORKING STORAGE VARIABLES AND *03290099
033000* COUNTERS.GETS SYSTEM TIME. OPENS INPUT/OUTPUT FILES. *03300099
033010* READS THE FIRST RECORD. *03301099
033100******************************************************************03310014
033200 03320014
033300** INITIALISE THE VARIABLES 03330099
033310 03331099
033400 INITIALIZE SPZBERR-PARAMETER-BLOCK 03340014
033800 03380099
034401 MOVE SPACES TO WS-DOCS-RECORD 03440199
034412 03441299
034413** OPEN THE FIXED LENGTH INPUT FILE 03441399
034700 PERFORM Y10000-OPEN-INPUT-FILE 03470099
034710 03471099
034720** OPEN THE VARIABLE LENGTH OUTPUT FILE 03472099
034800 PERFORM Y11000-OPEN-OUTPUT-FILE 03480099
034920 03492099
035000** READ THE FIRST RECORD OF INPUT FILES 03500099
035200 PERFORM Y12000-READ-IN-DOCS-DATA-FILE 03520099
035300 . 03530014
035400 A10000-EXIT. 03540014
035500 EXIT 03550014
035600 . 03560014
035610 03561029
035830 B10000-MAIN-PROCESS SECTION. 03583014
035900 03590014
036000******************************************************************03600014
036100* FUNCTION: WRITES THE HEADER RECORD INTO OUTPUT FILE.CONVERTS *03610054
036200* THE INPUT FILE RECORD TO GOIP FORMAT AND WRITES THE *03620054
036300* FORMATTED DATA RECORD IN THE OUTPUT FILE *03630054
036400******************************************************************03640014
036520 03652054
038000 PERFORM UNTIL INPUTFL-END-OF-FILE 03800099
038100 03810014
038110** THIS LOOP FINDS OUT THE ACTUAL LENGTH OF THE INPUT FILE. 03811099
038120** FOR EXAMPLE IF THE LENGTH OF THE INPUT RECORD IS 400 THEN03812099
038130** AFTER THE LOOP ENDS THE VALUE OF WX-INDEX WILL BE 400 03813099
038140** SO WE WILL KNOW THAT IN THE INPUT RECORD, FROM THE FIRST 03814099
038150** CHARACTER TO THE 400 CHARACTER NEED TO BE WRITTEN TO THE 03815099
038160** OUTPUT FILE. 03816099
038170** NOTE: WE CAN USE STRING FUNCTION DELIMIT BY SPACES BUT 03817099
038180** PROBLEM WITH STRING IS IF THE RECORD LENGTH IN THE INPUT 03818099
038190** IS ONE LESS THAN THE MAXIMUM LENGTH, THEN IN THAT CASE 03819099
038191** IT WILL FAIL. 03819199
038200 PERFORM VARYING WX-INDEX 03820099
038300 FROM LENGTH 03830099
038310 OF WS-GOIP-REC 03831099
038320 BY -1 03832099
038330 UNTIL WS-GOIP-REC (WX-INDEX:1) 03833099
038340 NOT = SPACES 03834099
038350 END-PERFORM 03835099
038360 03836099
038370 MOVE WX-INDEX TO WA-OUTPUTFL-RECORD-LEN 03837099
038380 MOVE WS-GOIP-REC TO FS-OUTPUTFL-RECORD 03838099
038390 03839099
038400 PERFORM Y13000-WRITE-OUTPUT-FILE 03840099
038401 03840199
038500 PERFORM Y12000-READ-INPUT-FILE 03850099
038600 03860014
038700 END-PERFORM 03870014
038800 . 03880014
038900 B10000-EXIT. 03890014
039000 EXIT 03900014
039100 . 03910014
039200 03920014
071000 C10000-TERMINATION SECTION. 07100014
071100 07110014
071200******************************************************************07120014
071300* FUNCTION: CLOSES ALL THE INPUT AND OUTPUT FILES *07130014
071400******************************************************************07140014
071500 07150014
071700 PERFORM Y14000-CLOSE-INPUT-FILE 07170099
071710 07171099
071800 PERFORM Y15000-CLOSE-OUTPUT-FILE 07180099
072100 . 07210014
072200 C10000-EXIT. 07220014
072300 EXIT 07230014
072400 . 07240014
072500 07250014
072640 Y10000-OPEN-INPUT-FILE SECTION. 07264099
072700 07270014
072800******************************************************************07280014
072900* FUNCTION: OPENS INPUT FILE AND PERFORMS ERROR *07290099
073000* PROCESSING IF OPEN IS UNSUCCESSFUL *07300099
073200******************************************************************07320014
073300 07330014
073310 MOVE 05 TO WS-ER-ERROR-LOCATOR4 07331099
073320 07332099
073400 OPEN INPUT INPUTFL 07340099
073500 07350014
073600 IF NOT INPUTFL-OK 07360099
073700 07370014
073900 MOVE 'Y10000-OPEN-INPUT-FILE' 07390099
074000 TO SPZC-SECTION-NAME 07400014
074100 MOVE WS-ER-OPEN-FILE-ERRMSG 07410014
074200 TO WS-ER-FILE-ERRMSG 07420014
074300 MOVE WC-INPUTFL TO WS-ER-E4FILENAME 07430099
074400 MOVE WF-INPUTFL-STATUS TO WS-ER-FILESTAT 07440099
074500 MOVE WS-ER-FILE-ERR-DETAILS 07450014
074600 TO SPZC-TEXT1 07460014
074601 SET SPZC-APPLICATION TO TRUE 07460199
074610 07461054
074700 PERFORM Z10000-ERROR-LOGGING 07470014
074800 07480014
074900 END-IF 07490014
074901 . 07490199
074902 Y10000-EXIT. 07490299
074903 EXIT 07490399
074904 . 07490499
074905 07490529
074906 Y11000-OPEN-OUTPUT-FILE SECTION. 07490699
074907 07490799
074908******************************************************************07490899
074909* FUNCTION: OPENS OUTPUT DOCS FILE AND PERFORMS ERROR PROCESSING *07490999
074910* IF OPEN IS UNSUCCESSFUL *07491099
074911******************************************************************07491199
074912 07491299
074913 MOVE 06 TO WS-ER-ERROR-LOCATOR4 07491399
074914 07491499
074915 OPEN OUTPUT OUTPUTFL 07491599
074920 07492029
074930 IF NOT OUTPUTFL-OK 07493099
074940 07494029
074960 MOVE 'Y11000-OPEN-OUTPUT-FILE' 07496099
074970 TO SPZC-SECTION-NAME 07497029
074980 MOVE WS-ER-OPEN-FILE-ERRMSG 07498029
074990 TO WS-ER-FILE-ERRMSG 07499029
074991 MOVE WC-OUTPUTFL TO WS-ER-E4FILENAME 07499199
074992 MOVE WF-OUTPUTFL-STATUS TO WS-ER-FILESTAT 07499299
074993 MOVE WS-ER-FILE-ERR-DETAILS 07499329
074994 TO SPZC-TEXT1 07499429
074995 SET SPZC-APPLICATION TO TRUE 07499599
074996 07499654
074997 PERFORM Z10000-ERROR-LOGGING 07499729
074998 07499829
074999 END-IF 07499929
075000 . 07500014
075100 Y11000-EXIT. 07510099
075200 EXIT 07520014
075300 . 07530014
084100 08410014
084200 Y12000-READ-IN-DOCS-DATA-FILE SECTION. 08420099
084300 08430014
084400******************************************************************08440014
084500* FUNCTION: READS DOCS DATA FILE AND PERFORMS ERROR PROCESSING *08450020
084600* IF READ IS UNSUCCESSFUL. *08460020
084700******************************************************************08470014
084800 08480014
084900 READ INPUTFL INTO WS-DOCS-RECORD 08490099
085000 08500014
085100 EVALUATE WF-INPUTFL-STATUS 08510099
085200 08520014
085300 WHEN 0 08530014
085400 08540014
085510 ADD WC-ONE TO WA-READ-COUNT 08551099
085600 08560014
085700 WHEN 10 08570014
085800 08580014
085900 SET INPUTFL-END-OF-FILE 08590099
086000 TO TRUE 08600014
086100 08610014
086200 WHEN OTHER 08620014
086300 08630014
086400 MOVE 'Y12000-READ-IN-DOCS-DATA-FILE' 08640099
086500 TO SPZC-SECTION-NAME 08650014
086600 MOVE WS-ER-READ-FILE-ERRMSG 08660014
086700 TO WS-ER-FILE-ERRMSG 08670014
086800 MOVE WC-INPUTFL TO WS-ER-E4FILENAME 08680099
086900 MOVE WF-INPUTFL-STATUS 08690099
087000 TO WS-ER-FILESTAT 08700014
087100 MOVE WS-ER-FILE-ERR-DETAILS 08710014
087200 TO SPZC-TEXT1 08720014
087201 08720199
087202 STRING 'PREVIOUS ROUTER ACC NO:' 08720299
087203 WS-ROUT-ACC-NO 08720399
087204 ',PREVIOUS LETTER TYPE:' 08720499
087205 WS-LETT-TYPE 08720599
087210 DELIMITED BY SIZE 08721099
087211 INTO WS-ER-FILE-KEY-DETAILS 08721199
087212 END-STRING 08721299
087213 08721399
087214 MOVE WS-ER-FILE-KEY-DETAILS 08721499
087215 TO SPZC-TEXT2 08721599
087216 MOVE WA-READ-COUNT TO WS-RDISP-COUNT 08721699
087217 08721799
087218 STRING 'RECORDS READ:' 08721899
087219 WS-RDISP-COUNT 08721999
087220 DELIMITED BY SIZE 08722099
087221 INTO SPZC-TEXT3 08722199
087222 END-STRING 08722299
087223 SET SPZC-APPLICATION 08722399
087230 TO TRUE 08723099
087300 08730054
089200 PERFORM Z10000-ERROR-LOGGING 08920014
089300 08930014
089400 END-EVALUATE 08940014
089500 . 08950014
089600 Y12000-EXIT. 08960099
089700 EXIT 08970014
089800 . 08980014
095800 09580014
095900 Y13000-WRITE-OUT-DOCS-FILE SECTION. 09590099
096000 09600031
096100******************************************************************09610031
096200* FUNCTION: THIS SECTION WRITES THE GOIP RECORD INTO THE OUTPUT *09620035
096300* FILE AND PERFORMS ERROR PROCESSING IF WRITE IS *09630099
096400* UNSUCCESSFUL *09640035
096500******************************************************************09650031
096600 09660031
096700 WRITE FS-OUTPUTFL-RECORD 09670099
096810 09681099
096900 IF NOT OUTPUTFL-OK 09690099
097000 09700031
097100 MOVE 'Y13000-WRITE-OUT-DOCS-FILE' 09710099
097200 TO SPZC-SECTION-NAME 09720031
097300 MOVE WS-ER-WRITE-FILE-ERRMSG 09730031
097400 TO WS-ER-FILE-ERRMSG 09740031
097500 MOVE WC-OUTPUTFL TO WS-ER-E4FILENAME 09750099
097600 MOVE WF-OUTPUTFL-STATUS TO WS-ER-FILESTAT 09760099
097700 MOVE WS-ER-FILE-ERR-DETAILS 09770031
097800 TO SPZC-TEXT1 09780031
097900 STRING 'ROUTER ACCOUNT NUMBER:' 09790099
098000 WS-ROUTER-ACC-NO 09800099
098010 OF WS-DOCS-RECORD 09801099
098100 ',LETTER TYPE:' 09810099
098200 WS-F001-LETTER-TYP 09820099
098300 OF WS-DOCS-RECORD 09830099
098400 DELIMITED BY SIZE 09840099
098500 INTO WS-ER-FILE-KEY-DETAILS 09850099
098600 END-STRING 09860099
098700 09870031
098800 MOVE WS-ER-FILE-KEY-DETAILS 09880031
098801 TO SPZC-TEXT2 09880199
098810 MOVE WA-WRITE-COUNT TO WS-WDISP-COUNT 09881099
098820 09882099
098830 STRING 'RECORDS WRITTEN:' 09883099
098840 WS-WDISP-COUNT 09884099
098850 DELIMITED BY SIZE 09885099
098860 INTO SPZC-TEXT3 09886099
098870 END-STRING 09887099
099000 SET SPZC-APPLICATION TO TRUE 09900031
099010 09901054
099100 PERFORM Z10000-ERROR-LOGGING 09910031
099200 09920031
099300 END-IF 09930031
099301 09930199
099310 ADD WC-ONE TO WA-WRITE-COUNT 09931099
099400 . 09940031
099600 Y13000-EXIT. 09960099
099700 EXIT 09970031
099800 . 09980031
105800 10580014
106000 Y14000-CLOSE-IN-DOCS-DATA-FILE SECTION. 10600099
106100 10610014
106200******************************************************************10620014
106300* FUNCTION: CLOSES THE INPUT FILE AND PERFORMS ERROR PROCESSING *10630099
106400* IF CLOSE IS UNSUCCESSFUL. *10640099
106600******************************************************************10660014
106700 10670014
106710 MOVE 07 TO WS-ER-ERROR-LOCATOR4 10671099
106720 10672099
106800 CLOSE INPUTFL 10680099
106900 10690014
107000 IF NOT INPUTFL-OK 10700099
107100 10710014
107200 MOVE 'Y14000-CLOSE-IN-DOCS-DATA-FILE ' 10720099
107300 TO SPZC-SECTION-NAME 10730014
107400 MOVE WS-ER-CLOSE-FILE-ERRMSG 10740014
107500 TO WS-ER-FILE-ERRMSG 10750014
107600 MOVE WC-INPUTFL TO WS-ER-E4FILENAME 10760099
107700 MOVE WF-INPUTFL-STATUS TO WS-ER-FILESTAT 10770099
107800 MOVE WS-ER-FILE-ERR-DETAILS 10780014
107900 TO SPZC-TEXT1 10790014
107901 SET SPZC-APPLICATION TO TRUE 10790199
107910 10791054
108000 PERFORM Z10000-ERROR-LOGGING 10800014
108100 10810014
108200 END-IF 10820014
108210 . 10821099
108220 Y14000-EXIT. 10822099
108230 EXIT 10823099
108240 . 10824099
108241 10824199
108242 Y15000-CLOSE-OUT-DOCS-FILE SECTION. 10824299
108243 10824399
108244******************************************************************10824499
108245* FUNCTION: CLOSES THE OUTPUT FILE AND PERFORMS ERROR PROCESSING *10824599
108246* IF CLOSE IS UNSUCCESSFUL. *10824699
108247******************************************************************10824799
108300 10830029
108301 MOVE 08 TO WS-ER-ERROR-LOCATOR4 10830199
108302 10830299
108310 CLOSE OUTPUTFL 10831099
108320 10832029
108330 IF NOT OUTPUTFL-OK 10833099
108340 10834029
108350 MOVE 'Y15000-CLOSE-OUT-DOCS-FILE' 10835099
108360 TO SPZC-SECTION-NAME 10836029
108370 MOVE WS-ER-CLOSE-FILE-ERRMSG 10837029
108380 TO WS-ER-FILE-ERRMSG 10838029
108390 MOVE WC-OUTPUTFL TO WS-ER-E4FILENAME 10839099
108391 MOVE WF-OUTPUTFL-STATUS TO WS-ER-FILESTAT 10839199
108392 MOVE WS-ER-FILE-ERR-DETAILS 10839229
108393 TO SPZC-TEXT1 10839329
108394 10839454
108395 SET SPZC-APPLICATION TO TRUE 10839599
108396 10839699
108397 PERFORM Z10000-ERROR-LOGGING 10839729
108398 10839829
108399 END-IF 10839929
108400 . 10840029
108410 Y15000-EXIT. 10841099
108500 EXIT 10850014
108600 . 10860014
108700 10870014
116900 Z10000-ERROR-LOGGING SECTION. 11690014
117000 11700014
117100******************************************************************11710014
117200* FUNCTION: LOGS THE ERROR MESSAGE AND THE ERROR DETAILS BY *11720014
117300* CALLING SPZBERR *11730014
117400******************************************************************11740014
117500 11750014
117600 SET SPZC-DISASTER TO TRUE 11760014
117800 CALL WC-SPZBERR USING SPZBERR-PARAMETER-BLOCK 11780014
117900 11790014
118000 ON EXCEPTION 11800014
118100 11810014
118200 MOVE WC-SPZBERR TO WS-ER-EXCP-CALLED-PGM 11820014
118300 MOVE WS-ER-EXCP-ERRMSG TO WS-ER-EXCPPGM-ERRMSG 11830014
118400 DISPLAY WS-ER-EXCPPGM-DETAILS 11840014
118500 DISPLAY SPZC-TEXT1 11850014
118600 DISPLAY SPZC-TEXT2 11860014
118700 DISPLAY SPZC-TEXT3 11870014
118800 MOVE WC-FATAL-ERROR TO RETURN-CODE 11880014
118801 11880199
118810 IF SPZC-DB2 11881099
118820 11882099
118830 DISPLAY 'UNEXPECTED SQL ERROR CODE' 11883099
118840 DISPLAY 'SQLCODE: ' SPZC-SQLCODE 11884099
118850 11885099
118860 END-IF 11886099
118870 11887099
118900 GOBACK 11890099
119000 11900014
119100 END-CALL 11910014
119200 . 11920014
119210 11921054
119300 Z10000-EXIT. 11930014
119400 EXIT 11940014
119500 . 11950014
119600 11960014
119700******************** END OF PROGRAM VARLENFL ***********************11970020
JCL snippet for the input output files:

002500 //*INPUT FILE


002600 //INPUTFL DD DSN=TTOI.DASGUPS.WORKAREA.INPUTFL,DISP=SHR
002700 //*OUTPUT FILE
002800 //OUTPUTFL DD DSN=TTOI.DASGUPS.WORKAREA.OUTPUTFL,
002900 // DISP=(,CATLG,DELETE),SPACE=(CYL,(500,500),RLSE),
003000 // RECFM=VB,LRECL=1004,BLKSIZE=0

Check that while giving the LRECL for the output file we are giving
1004. But the program says the max length of the Variable Length
Output file can be 1000 only.

The reason for this is while creating the file out of this 1004 bytes, 4
bytes will be allocated for the length of the record. So (1000+4) =
1004 this is how the length of the output file is determined.

References

None

--------------------End of the Document--------------------

S-ar putea să vă placă și