错误在cobol程序上打开VB文件来处理XML文件



长话短说,我需要在cobol程序中处理XML文件,我一直在阅读关于我可以使用企业cobol 6.3中的XML PARSE实用程序执行的内容。

我没有太多处理可变长度文件的经验,但我们最好的猜测是输入文件可能是可变长度的。我有一个示例文件,我想测试,它有以下信息屏幕

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           

这是我为这个任务实现的cobol代码的摘录

*****************************************************************
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     

这是我打开文件时得到的错误。文件状态39。长度不匹配,我不确定它在哪里。

********************************* 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 ********************************M OF DATA ********************************

问题是你想处理一个LINE SEQUENTIAL文件,但指定了ORGANIZATION SEQUENTIAL不同的长度,所以你得到一个你实际上不想要的VB文件(长度为4字节填充)。

换成LINE SEQUENTIAL,你可能就没事了。

更多细节可以在IBM程序员指南"处理行顺序文件"中看到。

最新更新