首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在cobol程序上打开VB文件以处理XML文件时出错

在cobol程序上打开VB文件以处理XML文件时出错
EN

Stack Overflow用户
提问于 2021-10-27 09:35:43
回答 1查看 89关注 0票数 1

长话短说,我需要在cobol程序中处理XML文件,我已经了解到可以使用企业cobol 6.3中的XML解析实用程序来执行此操作。

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

代码语言:javascript
运行
复制
    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代码的摘录。

代码语言:javascript
运行
复制
          *****************************************************************
           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。长度不匹配,我不确定它在哪里。

代码语言:javascript
运行
复制
        ********************************* 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 ********************************
EN

回答 1

Stack Overflow用户

发布于 2021-10-27 09:58:52

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

更改为LINE SEQUENTIAL,您可能就很好了。

更多细节可以在IBM Programmer's Guide "Processing line-sequential files"中看到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69736175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档