Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol GnuCOBOL (OpenCOBOL)
GnuCOBOL (OpenCOBOL) El compilador gratuito y Open Source cada vez más popular.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Duda] Buscar un Registro dariodr COBOL - General 1 8 de mayo de 2024 23:08
[Sintaxis] Leer último registro jmeza Fujitsu COBOL 9 11 de mayo de 2020 14:38
[Duda] Variar Tamaño de registro Gatomalo RM/COBOL 4 21 de noviembre de 2017 00:34
[Sintaxis] Uso de COMP-6 en registro jmeza Fujitsu COBOL 3 17 de junio de 2017 02:52
[Duda] Registro encontrado Dasije WinDev 0 7 de agosto de 2016 20:55

Respuesta
 
Herramientas

  #1
Antiguo 10 de diciembre de 2024, 14:03
Sergio
Acabo de llegar...
Última Actividad 28.12.2024 21:15
Posts Posts: 4
Likes enviados Enviados: 3
Likes recibidos Recibidos: 1
Tabla Problema al leer siguiente registro
0 Inactivo Inactivo

Buenos días,

Hace unas semanas realicé un curso de COBOL en Udemy y quiero practicar y aprender más sobre el lenguaje de programación COBOL.

Estoy intentando realizar un ejercicio muy básico pero no consigo que lea el siguiente registro de mi archivo de entrada. Cuando lee el 1er registro reconoce que es el final del archivo en la parte de "AT END" del READ. El objetivo es recorrer el fichero y grabarlo en el fichero de salida en forma de tabla.

Comparto código y fichero entrada y salida. Tengo entendido que en el fichero de entrada tiene que estar todo en una línea para que lo reconozca. Estoy usando el compilador OpenCobolIDE en Windows. No sé si hay compiladores más potentes que se usen más en el día a día.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                  SeqReadNo88.
  3.       *>AUTHOR.                    SERGIO.
  4.       *>INSTALLATION.              CURSO COBOL.
  5.       *>DATE-WRITTEN.              26/09/2024.
  6.       *>DATE-COMPILED.
  7.       *>SECURITY.                  NO ES CONFIDENCIAL.
  8.       *>--------------------------------------------------------------*
  9.       *>OBJETIVO:LEER FICHERO Y VOLCAR DATOS EN FICHERO DE SALIDA     *
  10.       *>--------------------------------------------------------------*
  11.  
  12.        ENVIRONMENT DIVISION.
  13.        CONFIGURATION SECTION.
  14.        SOURCE-COMPUTER.           IBM-3083.
  15.        OBJECT-COMPUTER.           IBM-3083.
  16.  
  17.        INPUT-OUTPUT SECTION.
  18.        FILE-CONTROL.
  19.            SELECT STUDENT ASSIGN TO "C:\COBOL\Archivos\1.STUDENTS.txt".
  20.            SELECT REPORTE ASSIGN TO "C:\COBOL\Archivos\REPORTE1.txt".
  21.  
  22.        DATA DIVISION.
  23.        FILE SECTION.
  24.        FD  STUDENT
  25.         *>LABEL RECORDS ARE STANDARD
  26.            RECORD CONTAINS 60 CHARACTERS
  27.            BLOCK CONTAINS 0 RECORDS.
  28.         *>DATA RECORD IS REG_EMPLEADOS.
  29.        01  REG-STUDENT            PIC X(60).
  30.        FD  REPORTE
  31.         *>LABEL RECORDS ARE STANDARD
  32.            RECORD CONTAINS 400 CHARACTERS
  33.            BLOCK CONTAINS 0 RECORDS.
  34.         *>DATA RECORD IS REG_REPORTE.
  35.        01  REG-REPORTE     PIC X(400).
  36.  
  37.        WORKING-STORAGE SECTION.
  38.        01  STUDENT-DETALLE.
  39.            05 STUDENT-ID   PIC 9(7).
  40.            05 NOMBRE       PIC X(8).
  41.            05 INITIALS     PIC X(2).
  42.            05 DATEOFBIRTH.
  43.               06 YEAR      PIC 9(4).
  44.               06 MONTH     PIC 9(2).
  45.               06 DIA       PIC 9(2).
  46.            05 COURSE-ID    PIC X(4).
  47.            05 GENDER       PIC X(1).
  48.  
  49.        01  SW-FIN          PIC X(3) VALUE SPACES.
  50.  
  51.        01  WS-TITULO-1.
  52.            05 FILLER      PIC X(45) VALUE SPACES.
  53.            05 WS-TIT      PIC X(16) VALUE "DATOS DE ALUMNOS".
  54.            05 FILLER      PIC X(27) VALUE SPACES.
  55.  
  56.        01  WS-GUIONES.
  57.            05 FILLER       PIC X(1)  VALUE SPACES.
  58.            05 FILLER       PIC X(120) VALUE ALL "-".
  59.            05 FILLER       PIC X(1)  VALUE SPACES.
  60.  
  61.        01  WS-TITULO-2.
  62.            05 FILLER       PIC X(04) VALUE SPACES.
  63.            05 NUMERO       PIC X(6)  VALUE "NUMERO".
  64.            05 FILLER       PIC X(20) VALUE SPACES.
  65.            05 APELLIDO     PIC X(8)  VALUE "APELLIDO".
  66.            05 FILLER       PIC X(10) VALUE SPACES.
  67.            05 INICIALES    PIC X(9)  VALUE "INICIALES".
  68.            05 FILLER       PIC X(10) VALUE SPACES.
  69.            05 DATESOFBIRTH PIC X(14) VALUE "AÑO NACIMIENTO".
  70.            05 FILLER       PIC X(10) VALUE SPACES.
  71.            05 CODIGOCURSO  PIC X(12) VALUE "CODIGO CURSO".
  72.            05 FILLER       PIC X(10) VALUE SPACES.
  73.            05 GENERO       PIC X(12) VALUE "GENERO".
  74.  
  75.        01  WS-STUDENT-DETALLE.
  76.            05 FILLER           PIC X(04) VALUE SPACES.
  77.            05 WS-STUDENT-ID    PIC 9(7).
  78.            05 FILLER           PIC X(20) VALUE SPACES.
  79.            05 WS-STUDENT-NAME  PIC X(8).
  80.            05 FILLER           PIC X(13) VALUE SPACES.
  81.            05 WS-INITIALS      PIC X(2).
  82.            05 FILLER           PIC X(16) VALUE SPACES.
  83.            05 WS-DATEOFBIRTH.
  84.               10 YEAR          PIC 9(4).
  85.               10 MONTH         PIC 9(2).
  86.               10 DIA           PIC 9(2).
  87.            05 FILLER           PIC X(18) VALUE SPACES.
  88.            05 WS-COURSE-ID     PIC X(4).
  89.            05 FILLER           PIC X(16) VALUE SPACES.
  90.            05 WS-GENDER        PIC X(1).
  91.  
  92.        LINKAGE SECTION.
  93.  
  94.        PROCEDURE DIVISION.
  95.        010-INICIO.
  96.            PERFORM 020-ABRE-ARCHIVOS THRU 020-FIN
  97.            PERFORM 030-TITULOS       THRU 030-FIN
  98.            PERFORM 040-LEE           THRU 040-FIN
  99.            PERFORM 040-PROCESO       THRU 040-FIN
  100.                    UNTIL SW-FIN EQUAL "FIN".
  101.            PERFORM 050-FINAL         THRU 050-FIN
  102.            GOBACK.
  103.  
  104.        020-ABRE-ARCHIVOS.
  105.            OPEN INPUT STUDENT
  106.                 OUTPUT REPORTE.
  107.        020-FIN. EXIT.
  108.  
  109.        030-TITULOS.
  110.            WRITE REG-REPORTE FROM WS-TITULO-1 AFTER ADVANCING 1
  111.            WRITE REG-REPORTE FROM WS-GUIONES AFTER ADVANCING 1
  112.            WRITE REG-REPORTE FROM WS-TITULO-2 AFTER ADVANCING 1
  113.            WRITE REG-REPORTE FROM WS-GUIONES AFTER ADVANCING 1.
  114.        030-FIN. EXIT.
  115.  
  116.        040-PROCESO.
  117.            MOVE STUDENT-ID TO WS-STUDENT-ID
  118.            MOVE NOMBRE TO WS-STUDENT-NAME
  119.            MOVE INITIALS TO WS-INITIALS
  120.            MOVE DATEOFBIRTH TO WS-DATEOFBIRTH
  121.            MOVE COURSE-ID TO WS-COURSE-ID
  122.            MOVE GENDER TO WS-GENDER
  123.  
  124.            *>DISPLAY WS-STUDENT-NAME.
  125.           *>DISPLAY REG-STUDENT.
  126.            WRITE REG-REPORTE FROM WS-STUDENT-DETALLE AFTER ADVANCING 1.
  127.  
  128.            *>DISPLAY WS-STUDENT-DETALLE
  129.           *>DISPLAY "VALOR ES " SW-FIN.
  130.  
  131.        040-LEE.
  132.            READ STUDENT INTO STUDENT-DETALLE AT END
  133.                 MOVE "FIN" TO SW-FIN.
  134.  
  135.        040-FIN. EXIT.
  136.  
  137.        050-FINAL.
  138.           *>DISPLAY SW-FIN
  139.            CLOSE STUDENT REPORTE.
  140.        050-FIN. EXIT.
Archivos Adjuntos
Tipo de Archivo: txt STUDENTS.txt (1.021 Bytes)Descargas: 23
Tipo de Archivo: txt REPORTE1.TXT (2,0 KB)Descargas: 49
Tipo de Archivo: txt PROG0010.txt (5,1 KB)Descargas: 60
Sergio is offline   Responder Con Cita
  #2
Antiguo 10 de diciembre de 2024, 18:13
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Sergio, lo primero, el código es mejor publicarlo directamente en tu post para que sea visible sin necesidad de descargar archivos.

Declara los ficheros de la siguiente manera (aquí lo importante es la palabra clave "LINE"):
Código COBOL:
  1.        INPUT-OUTPUT SECTION.
  2.        FILE-CONTROL.
  3.            SELECT STUDENT ASSIGN TO "STUDENTS.txt"
  4.            ORGANIZATION LINE SEQUENTIAL.
  5.            SELECT REPORTE ASSIGN TO "REPORTE1.txt"
  6.            ORGANIZATION LINE SEQUENTIAL.
  7.  
  8.        DATA DIVISION.
  9.        FILE SECTION.
  10.        FD  STUDENT.
  11.        01  REG-STUDENT     PIC X(60).
  12.        FD  REPORTE.
  13.        01  REG-REPORTE     PIC X(400).

Si quieres ver lo que está leyendo, la parte del READ la puedes modificar así:
Código COBOL:
  1.        040-LEE.
  2.            READ STUDENT INTO STUDENT-DETALLE
  3.                AT  END
  4.                    MOVE "FIN" TO SW-FIN
  5.                
  6.                NOT AT END
  7.                    DISPLAY STUDENT-DETALLE
  8.            END-READ
  9.            .



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #3
Antiguo 10 de diciembre de 2024, 18:38
Sergio
Acabo de llegar...
Última Actividad 28.12.2024 21:15
Posts Posts: 4
Likes enviados Enviados: 3
Likes recibidos Recibidos: 1

Buenas tardes @Kuk,

Muchas gracias por el aporte. Es mi 1er foro

He realizado los cambios en la INPUT-OUTPUT SECTION y DATA DIVSION

Código COBOL:
  1. INPUT-OUTPUT SECTION.
  2. FILE-CONTROL.
  3.     SELECT STUDENT ASSIGN TO "STUDENTS.txt"
  4.     ORGANIZATION LINE SEQUENTIAL.
  5.     SELECT REPORTE ASSIGN TO "REPORTE1.txt"
  6.     ORGANIZATION LINE SEQUENTIAL.
  7.  
  8. DATA DIVISION.
  9. FILE SECTION.
  10. FD  STUDENT.
  11. 01  REG-STUDENT     PIC X(60).
  12. FD  REPORTE.
  13. 01  REG-REPORTE     PIC X(400).

Sin embargo sigue sin leer el 2o registro. Lee el primer registro y parece que no llega a leer el 2o, no aparece en el display del AT END ni NOT AT END que he puesto para controlar que registro está leyendo. En el fichero de entrada están ambos registros en la misma línea. El fichero de entrada tenía 32 registros. Lo acorté a 2 para comprobar porque no estaba leyendo el siguiente registro.

No sé que falta para que reconozca el 2º registro.
Sergio is offline   Responder Con Cita
  #4
Antiguo 10 de diciembre de 2024, 18:46
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Sergio,

El fichero que has colgado en tu primer post son 32 registros. Si es el mismo que usas, debería funcionar, a mi me funciona bien, lo he probado con el mismo compilador.

Ojo, en tu código el fichero de entrada se llama "1.STUDENTS.txt" mientras que el fichero que has colgado se llama "STUDENTS.txt".
Creo que se te ha colado lo del "1.".

También no uses caminos completos, sólo con el nombre del fichero vale, los tomara/creará en el mismo directorio que el programa.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:43.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.