View previous topic :: View next topic
|
Author |
Message |
ojdiaz
New User
Joined: 19 Nov 2008 Posts: 98 Location: Spain
|
|
|
|
Hi Everyone.
Long Story short, I need to process an XML File in a cobol Program, which i've been reading about I can perform using the XML PARSE utility from enterprise cobol 6.3.
I don't have much experience working with Variable Length files, but our best guess is that the input file could be of variable length. I have a sample file which i want to test, which has the following Info screen
Code: |
Data Set Name . . . . : TDES.XML.SPOT.TR
General Data Current Allocation
Management class . . : **None** Allocated blocks . : 5
Storage class . . . : **None** Allocated extents . : 1
Volume serial . . . : ABCXYZ
Device type . . . . : 3390
Data class . . . . . : **None**
Organization . . . : PS Current Utilization
Record format . . . : VB Used blocks . . . . : 1
Record length . . . : 10000 Used extents . . . : 1
Block size . . . . : 10004
1st extent blocks . : 5
Secondary blocks . : 0 Dates
Data set name type : Creation date . . . : 2021/10/27
Referenced date . . : 2021/10/27
Expiration date . . : ***None***
SMS Compressible . : NO |
This is an extract of the cobol code i have implemented for this task
Code: |
*****************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. XXXXXXXX.
AUTHOR. XXXXXXXX.
******************************************************************
* E N V I R O N M E N T D I V I S I O N *
******************************************************************
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
*
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
******************************************************************
* I N P U T - O U T P U T S E C T I O N *
******************************************************************
INPUT-OUTPUT SECTION.
*
FILE-CONTROL.
****************************************************************
DESODH SELECT FENTRADA
DESODH ASSIGN TO FENTRADA
DESODH ORGANIZATION IS SEQUENTIAL
DESODH ACCESS MODE IS SEQUENTIAL
DESODH FILE STATUS IS FS-FENTRADA-XML.
******************************************************************
* D A T A D I V I S I O N *
******************************************************************
DATA DIVISION.
******************************************************************
* FILE SECTION *
******************************************************************
*
FILE SECTION.
*
DESODH FD FENTRADA
DESODH LABEL RECORDS STANDARD
DESODH RECORD IS VARYING FROM 1 TO 10000 DEPENDING ON W-REC-LENGTH
DESODH RECORDING MODE IS V
DESODH BLOCK CONTAINS 0 RECORDS.
DESODH 01 REG-FENTRADA.
02 PIC X OCCURS 1 TO 10000 DEPENDING ON W-REC-LENGTH.
WORKING-STORAGE SECTION.
*
******************************************************************
* DEFINICIÓN DEL FICHERO DE ENTRADA *
******************************************************************
01 REG-ENTRADA PIC X(1300).
*
******************************************************************
* DEFINICIÓN DE LOS FICHEROS DE SALIDA *
******************************************************************
COPY FMIF1113.
*
******************************************************************
* DEFINICIÓN DE VARIABLES WORKING *
******************************************************************
01 W-VARIABLES-AUXILIARES.
** VARIABLES A CAMBIAR EN CADA PROGRAMA:
05 W-CONT-CAMPOS PIC 9(03) VALUE 46.
** VARIABLES A CAMBIAR EN CADA PROGRAMA:
05 W-SITUACION PIC 9(04) VALUE ZEROS.
05 W-MENSAJE PIC X(100) VALUE SPACES.
05 W-STATUS PIC X(02) VALUE SPACES.
...................
******************************************************************
* P R O C E D U R E D I V I S I O N *
******************************************************************
PROCEDURE DIVISION.
PERFORM 1000-INICIO
PERFORM 4000-PROCESO-XML UNTIL SI-FIN-PROCESO-XML
PERFORM 3000-FINAL
STOP RUN.
******************************************************************
* 1000-INICIO. *
******************************************************************
1000-INICIO.
MOVE 1000 TO W-SITUACION.
DESODH PERFORM 1060-ABRIR-FICHERO-XML
.
DESODH******************************************************************
DESODH* 1060-ABRIR-FICHERO-XML *
DESODH******************************************************************
DESODH 1060-ABRIR-FICHERO-XML.
DESODH
DESODH MOVE 1060 TO W-SITUACION.
DESODH SET NO-ERROR-LECTURA TO TRUE
DESODH SET NO-FIN-FENTRADA TO TRUE
DESODH SET NO-TAG-ENCONTRADO TO TRUE
DESODH SET NO-ENCONTRADO-IDENTIFICADOR TO TRUE
DESODH SET NO-VERSION-INFORMATION TO TRUE
DESODH SET NO-ENCODING-DECLARATION TO TRUE
DESODH OPEN INPUT FENTRADA
DESODH
DESODH IF FS-FENTRADA-XML NOT = 00
DESODH DISPLAY 'ERROR AL ABRIR FICHERO XML. FS: ' FS-FENTRADA-XML
DESODH MOVE 'ERROR OPEN FENTRADA ' TO W-MENSAJE
DESODH MOVE FS-FENTRADA-XML TO W-STATUS
DESODH PERFORM PR-FIN-ERROR-LOGICO
DESODH END-IF.
DESODH
DESODH PERFORM 8000-LEER-FENTRADA
DESODH******************************************************************
DESODH* 8000-LEER-FENTRADA
DESODH******************************************************************
DESODH 8000-LEER-FENTRADA.
DESODH MOVE 8000 TO W-SITUACION
DESODH READ FENTRADA
DESODH AT END SET SI-FIN-PROCESO-XML TO TRUE
DESODH IF FS-FENTRADA-XML NOT = 0
DESODH DISPLAY 'ERROR EN EL READ XML. FS: ' FS-FENTRADA-XML
DESODH MOVE 'ERROR READ FENTRADA ' TO W-MENSAJE
DESODH MOVE FS-FENTRADA-XML TO W-STATUS
DESODH PERFORM PR-FIN-ERROR-LOGICO
DESODH END-IF
DESODH .
...........................more code |
And this is the error I'm getting while opening the file. File status 39. A mismatch on lengths that I'm not sure where it is.
Code: |
********************************* TOP OF DATA **********************************OF DATA **********************************
IGZ0201W A file attribute mismatch was detected. File FENTRADA in program MIFD1113 had a record length of 10004 and
the file specified in the ASSIGN clause had a record length of 10000.
ERROR AL ABRIR FICHERO XML. FS: 39
************************************************
* PROGRAMA MIFD1113 ERROR EJECUCION *
************************************************
* PARRAFO : 1060
* STATUS : 39
* NOMBRE RUT :
* MENSAJE : ERROR OPEN FENTRADA
* CLAVE-ACCESO :
************************************************
CEE3250C The system or user abend U1777 R=NULL was issued.
From compile unit BKCANCEL at entry point BKCANCEL at compile unit offset +000006D6 at entry offset +000006D6
at address 000C30D6.
<> LEAID ENTERED (LEVEL 02/26/2016 AT 17.55)
<> LEAID PROCESSING COMPLETE. RC=4
******************************** BOTTOM OF DATA ******************************** |
Finally, this is the JCL step used to run this program
Code: |
//P010 EXEC TSOBATCH,COND=(4,LT)
//FENTRADA DD DSN=TDES.XML.SPOT.TR,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM (DBSD)
RUN PROG (MIFD1113)
END |
Any feedback or help would be appreciate it. |
|
Back to top |
|
|
Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8696 Location: Dubuque, Iowa, USA
|
|
|
|
You need to allow for the 4 byte record descriptor word (RDW) which starts every variable length data set. Change 10000 in your program to 9996. |
|
Back to top |
|
|
ojdiaz
New User
Joined: 19 Nov 2008 Posts: 98 Location: Spain
|
|
|
|
Robert Sample wrote: |
You need to allow for the 4 byte record descriptor word (RDW) which starts every variable length data set. Change 10000 in your program to 9996. |
Thanks a Lot Robert. It worked just fine. I'll need to check the documentation in depth but this fixes my current issue.
Cheers! |
|
Back to top |
|
|
|