COBOL 注册表不写入完整信息

问题描述 投票:0回答:1

我正在学习 COBOL,并尝试编写一个小程序来读取一个文件,然后以格式写入另一个文件,但它不会写入读取文件中的全部信息。

写入 WS-STATUS-EMP 后,它会停止写入输出文件。

.cbl代码:

       IDENTIFICATION DIVISION.
       PROGRAM-ID.                PROG01.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.

       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT EMPLEADOS ASSIGN TO "C:\COBOL\Archivos\EMPLEADOS.txt".
           SELECT REPORTE   ASSIGN TO "C:\COBOL\Archivos\REPORTE.txt".

       DATA DIVISION.
       FILE SECTION.
       FD EMPLEADOS
           LABEL RECORDS ARE STANDARD
           RECORD CONTAINS 50 CHARACTERS
           BLOCK CONTAINS 0 RECORDS
           DATA RECORD IS REG-EMPLEADOS.
       01  REG-EMPLEADOS          PIC X(50).

       FD REPORTE
           LABEL RECORDS ARE STANDARD
           RECORD CONTAINS 50 CHARACTERS
           BLOCK CONTAINS 0 RECORDS
           DATA RECORD IS REG-REPORTE.
       01  REG-REPORTE            PIC X(50).

       WORKING-STORAGE SECTION.
       01  WS-AREAS-A-USAR.
           05 WS-REG-EMPLEADOS.
              10 WS-NUMERO-EMP    PIC 9(05).
              10 WS-NOMBRE-EMP    PIC X(30).
              10 WS-STATUS-EMP    PIC 9(01).
              10 WS-DEPTO-EMP     PIC 9(03).
              10 WS-PUESTO-EMP    PIC 9(02).
              10 WS-SALARIO-EMP   PIC 9(07)V99.
           05 WS-LEIDOS-EMP       PIC 9(05)    VALUE ZEROS.
           05 WS-IMPRESOS         PIC 9(05)    VALUE ZEROS.
           05 WS-TOTAL-SALARIOS   PIC 9(09)V99 VALUE ZEROS.

       01  WS-TITULO-1.
           05 FILLER              PIC X(27)    VALUE SPACES.
           05 WS-TIT-1            PIC X(25)
                                  VALUE "EMPLEADOS DE LA EMPRESA: ".
           05 FILLER              PIC X(28)    VALUE SPACES.

       01  WS-TITULO-2.
           05 FILLER              PIC X(01)    VALUE "/".

       01  WS-DETALLE.
           05 FILLER              PIC X(04)    VALUE SPACES.
           05 WS-DET-NUMERO       PIC ZZZZ9.
           05 FILLER              PIC X(04)    VALUE SPACES.
           05 WS-DET-NOMBRE       PIC X(30).
           05 FILLER              PIC X(04)    VALUE SPACES.
           05 WS-DET-STATUS       PIC 9(01).
           05 FILLER              PIC X(04)    VALUE SPACES.
           05 WS-DET-DEPTO        PIC 9(03).
           05 FILLER              PIC X(04)    VALUE SPACES.
           05 WS-DET-PUESTO       PIC 9(02).
           05 FILLER              PIC X(03)    VALUE SPACES.
           05 WS-DET-SALARIO      PIC Z,ZZZ,ZZ9.99.
           05 FILLER              PIC X(04)    VALUE SPACES.

       01  WS-DETALLE-LEIDOS.
           05 FILLER              PIC X(01).
           05 FILLER              PIC X(29)
                                  VALUE "TOTAL DE EMPLEADOS LEIDOS  : ".
           05 WS-TOT-LEIDOS       PIC 9(05).
           05 FILLER              PIC X(45)    VALUE SPACES.

       01  WS-DETALLE-IMPRESOS.
           05 FILLER              PIC X(01).
           05 FILLER              PIC X(29)
                                  VALUE "TOTAL DE EMPLEADOS IMPRESOS: ".
           05 WS-TOT-IMPRESOS     PIC 9(05).
           05 FILLER              PIC X(45)    VALUE SPACES.

       PROCEDURE DIVISION.
       010-INICIO.
           OPEN INPUT  EMPLEADOS
                OUTPUT REPORTE
           WRITE REG-REPORTE FROM WS-TITULO-1.
       020-LEE.
           READ EMPLEADOS INTO WS-REG-EMPLEADOS AT END
                GO TO 100-FIN.

           ADD 1 TO WS-TOT-LEIDOS
           MOVE WS-NUMERO-EMP     TO WS-DET-NUMERO
           MOVE WS-NOMBRE-EMP     TO WS-DET-NOMBRE
           MOVE WS-STATUS-EMP     TO WS-DET-STATUS
           MOVE WS-DEPTO-EMP      TO WS-DET-DEPTO
           MOVE WS-PUESTO-EMP     TO WS-DET-PUESTO
           MOVE WS-SALARIO-EMP    TO WS-DET-SALARIO
           WRITE REG-REPORTE FROM WS-DETALLE AFTER ADVANCING 1
           
           GO TO 020-LEE.
       100-FIN.
           WRITE REG-REPORTE FROM WS-DETALLE-LEIDOS AFTER ADVANCING 1
           CLOSE EMPLEADOS
                 REPORTE
           GOBACK.

输入文件:

00100费尔南托莱多·埃斯佩耶尔 82003000320005000200何塞·玛丽亚·梅迪纳 51001000280006000300罗伯托·佩雷斯·加西亚 80205000560007000400韦努斯蒂亚诺·埃斯特拉达·门德斯 762070002 10000000500瓦伦丁·希门尼斯·奥赫达 810010001900080

cobol
1个回答
0
投票

REG-REPORTE
被定义为
PIC X(50)
,因此当您
WRITE REG-REPORTE FROM WS-DETALLE AFTER ADVANCING 1
时,您只写出
WS-DETALLE
的前 50 个字节。

您可能希望将

REG-REPORTE
定义为
PIC X(80)

© www.soinside.com 2019 - 2024. All rights reserved.