Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol COBOL - General
COBOL - General Discusiones de temática general sobre el lenguaje COBOL y todo lo relacionado con él.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Duda] Leer archivos COBOL dariodr COBOL - General 1 10 de febrero de 2023 12:04
[Duda] Leer archivos RM Cobol desde PowerCobol Roger PowerCOBOL (ActiveX, v4 - v11) 11 23 de marzo de 2020 14:01
[Sintaxis] Leer archivos Cobol desde VB6 drvedia1981 PowerCOBOL v3 (V3L10, Win32) 8 31 de enero de 2018 00:53
[Duda] No puedo adjuntar archivos Hrmcobol Funcionamiento del Foro 7 10 de junio de 2017 14:59
[Duda] Leer y llenar archivos PDF lfortuny PowerCOBOL (ActiveX, v4 - v11) 12 24 de abril de 2016 19:36

Respuesta
 
Herramientas

  #1
Antiguo 9 de marzo de 2023, 03:50
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11
Configuración No puedo leer archivos.
0 Inactivo Inactivo

Buenas coboleros, otra vez por aqui.
Tengo dos codigos: uno para crear y agregar datos a un archivo y otro para leer el archivo, pero a la hora de leer el archivo me aparecen errores. Dejo los dos codigos.
NOTA: Son archivos indexados.

Codigo para crear archivo.
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. MAIN.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT OPTIONAL EMPLEADOS-ARCHIVO
  8.                 ASSIGN TO "emple.dat"
  9.                 ORGANIZATION IS LINE SEQUENTIAL.
  10.  
  11.        DATA DIVISION.
  12.        FILE SECTION.
  13.        FD  EMPLEADOS-ARCHIVO.
  14.        01 EMPLEADOS-REGISTRO.
  15.            05 EMPLEADOS-ID          PIC X(6).
  16.            05 EMPLEADOS-NOMBRE      PIC X(25).
  17.            05 EMPLEADOS-APELLIDOS   PIC X(35).
  18.            05 EMPLEADOS-EDAD        PIC X(3).
  19.            05 EMPLEADOS-TELEFONO    PIC X(9).
  20.            05 EMPLEADOS-DIRECCION   PIC X(35).
  21.        WORKING-STORAGE SECTION.
  22.        01  IDENTIFICADOR    PIC X(37)
  23.                 VALUE "Introduce un ID del nuevo empleado: ".
  24.        01  NOMBRE           PIC X(35)
  25.                 VALUE "Introduce un nombre del empleado: ".
  26.        01  APELLIDOS        PIC X(25)            
  27.                 VALUE "Introduce los apellidos: ".
  28.        01  EDAD             PIC X(20)
  29.                 VALUE "Introduce la edad: ".
  30.        01  TELEFONO         PIC X(33)
  31.                 VALUE "Introduce un numero de telefono: ".
  32.        01  DIRECCION        PIC X(26)
  33.                 VALUE "Introduce una direccion: ".
  34.        01  SI-NO      PIC X.
  35.        01  ENTRADA    PIC X.
  36.  
  37.        PROCEDURE DIVISION.
  38.        INICIO-PROGRAMA.
  39.            PERFORM PROCEDIMIENTO-APERTURA.
  40.            MOVE "S" TO SI-NO.
  41.            PERFORM AGREGAR-REGISTROS UNTIL SI-NO = "N".
  42.            PERFORM PROCEDIMIENTO-CIERRE.
  43.        FIN-PROGRAMA.
  44.            STOP RUN.
  45.  
  46.        PROCEDIMIENTO-APERTURA.
  47.            OPEN EXTEND EMPLEADOS-ARCHIVO.
  48.  
  49.        PROCEDIMIENTO-CIERRE.
  50.            CLOSE EMPLEADOS-ARCHIVO.
  51.  
  52.        AGREGAR-REGISTROS.
  53.            MOVE "N" TO ENTRADA.
  54.            PERFORM OBTENER-CAMPOS UNTIL ENTRADA = "S".
  55.            PERFORM ESCRIBIR-REGISTRO.
  56.            PERFORM REINICIAR.
  57.  
  58.        OBTENER-CAMPOS.
  59.            MOVE SPACE TO EMPLEADOS-REGISTRO.
  60.            DISPLAY IDENTIFICADOR " ? ".
  61.            ACCEPT EMPLEADOS-ID.
  62.            DISPLAY NOMBRE " ? ".
  63.            ACCEPT EMPLEADOS-NOMBRE.
  64.            DISPLAY APELLIDOS " ? ".
  65.            ACCEPT EMPLEADOS-APELLIDOS.
  66.            DISPLAY EDAD " ? ".
  67.            ACCEPT EMPLEADOS-EDAD.
  68.            DISPLAY TELEFONO "?".
  69.            ACCEPT EMPLEADOS-TELEFONO
  70.            DISPLAY DIRECCION.
  71.            ACCEPT EMPLEADOS-DIRECCION.
  72.            PERFORM CONTINUAR.
  73.  
  74.        CONTINUAR.
  75.            MOVE "S" TO ENTRADA.
  76.            IF  EMPLEADOS-NOMBRE = SPACE
  77.                MOVE "N" TO ENTRADA
  78.            END-IF.
  79.  
  80.        ESCRIBIR-REGISTRO.
  81.            WRITE EMPLEADOS-REGISTRO.
  82.  
  83.        REINICIAR.
  84.            DISPLAY "Desea almacenar otro registro s/n".
  85.            ACCEPT SI-NO.
  86.            IF SI-NO = "s"
  87.                MOVE "S" TO SI-NO.
  88.            IF SI-NO NOT = "S"
  89.                MOVE "N" TO SI-NO.        

Codigo para leer archivo
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. MAIN.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT EMPLEADOS-ARCHIVO
  8.                 ASSIGN TO "emple.dat"
  9.                 ORGANIZATION IS INDEXED
  10.                 RECORD KEY IS EMPLEADOS-ID
  11.                 ACCESS MODE IS DYNAMIC.
  12.  
  13.        DATA DIVISION.
  14.        FILE SECTION.
  15.        FD  EMPLEADOS-ARCHIVO.
  16.        01  EMPLEADOS-REGISTRO.
  17.            05 EMPLEADOS-ID          PIC X(6).
  18.            05 EMPLEADOS-NOMBRE      PIC X(25).
  19.            05 EMPLEADOS-APELLIDOS   PIC X(35).
  20.            05 EMPLEADOS-EDAD        PIC X(3).
  21.            05 EMPLEADOS-TELEFONO    PIC X(9).
  22.            05 EMPLEADOS-DIRECCION   PIC X(35).
  23.        WORKING-STORAGE SECTION.
  24.        77  LEE-TODO                 PIC X.
  25.  
  26.        PROCEDURE DIVISION.
  27.        INICIO-PROGRAMA.
  28.            PERFORM PROCEDIMIENTO-APERTURA.
  29.            MOVE "0" TO LEE-TODO.
  30.            PERFORM LEE-SIGUIENTE-REGISTRO.
  31.            IF LEE-TODO = "1"
  32.             DISPLAY "No se encontraron registros en el archivo."
  33.            ELSE    
  34.                PERFORM MUESTRA-CAMPOS UNTIL LEE-TODO = "1".
  35.                PERFORM PROCEDIMIENTO-DE-CIERRE.
  36.                STOP RUN.
  37.                
  38.        PROCEDIMIENTO-APERTURA.
  39.            OPEN I-O EMPLEADOS-ARCHIVO.
  40.            
  41.        PROCEDIMIENTO-DE-CIERRE.
  42.            CLOSE EMPLEADOS-ARCHIVO.
  43.            
  44.        MUESTRA-CAMPOS.
  45.            DISPLAY "ID: " EMPLEADOS-ID.
  46.            DISPLAY "Nombre: " EMPLEADOS-NOMBRE.
  47.            DISPLAY "Apellidos: " EMPLEADOS-APELLIDOS.
  48.            DISPLAY "Edad: " EMPLEADOS-EDAD.
  49.            DISPLAY "Telefono: " EMPLEADOS-TELEFONO.
  50.            DISPLAY "Direccion: " EMPLEADOS-DIRECCION.
  51.            
  52.        LEE-SIGUIENTE-REGISTRO.
  53.            READ EMPLEADOS-ARCHIVO NEXT RECORD
  54.                AT END MOVE "1" TO LEE-TODO.

Error que aparece en rmcobol
[ATTACH=CONFIG]888[/ATTACH]
Imágenes Adjuntas
 
dariodr is offline   Responder Con Cita
  #2
Antiguo 9 de marzo de 2023, 08:26
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@dariodr, dices "NOTA: Son archivos indexados."

No. En el primer código abres un fichero secuencial. En el segundo código abres un fichero indexado.

Revisa eso y cuentanos.....



Cambia el fichero del primer código a indexado. No podrás hacer un "open extend". Tienes que hacer un "open output" si no existe o quieres crearlo de nuevo y un "open i-o" si quieres que permanezca la información que contiene.



Operaciones permitidas en ficheros cobol dependiendo su estructura y modo de apertura:

Dynamic son ficheros indexados.

Random son ficheros relativos ( no los recomiendo )

[ATTACH=CONFIG]889[/ATTACH]


Te recomiendo leas con detenimiento este mantenimiento de fichero de clientes de @FPAIX y que preguntes lo que no entiendas.

[Información] Ejemplos de manejo de archivos y tecla de funcion

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  ficheros.png
Vistas: 34
Tamaño:  57,5 KB  
JCantero is offline   Responder Con Cita
  #3
Antiguo 9 de marzo de 2023, 14:37
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@dariodr, intensa seguir este ejemplo y me vas preguntando lo que no entiendas para hacer funcionar a tu programa.
[Información] Ejemplo de Mantenimiento para RM/Cobol y OpenCobol
JCantero is offline   Responder Con Cita
  #4
Antiguo 10 de marzo de 2023, 02:12
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11

Hola JCantero, modifique el primer programa para hacerlo en forma secuencial y funciono.
Tambien modifique un poco el segundo programa quedando asi.
Todo funciona perfectamente.
Salu2.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. MAIN.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT EMPLEADOS-ARCHIVO
  8.                 ASSIGN TO "emple.dat"
  9.                 ORGANIZATION IS INDEXED
  10.                 RECORD KEY IS EMPLEADOS-ID
  11.                 ACCESS MODE IS DYNAMIC.
  12.  
  13.        DATA DIVISION.
  14.        FILE SECTION.
  15.        FD  EMPLEADOS-ARCHIVO.
  16.        01  EMPLEADOS-REGISTRO.
  17.            05 EMPLEADOS-ID          PIC X(6).
  18.            05 EMPLEADOS-NOMBRE      PIC X(25).
  19.            05 EMPLEADOS-APELLIDOS   PIC X(35).
  20.            05 EMPLEADOS-EDAD        PIC X(3).
  21.            05 EMPLEADOS-TELEFONO    PIC X(9).
  22.            05 EMPLEADOS-DIRECCION   PIC X(35).
  23.        WORKING-STORAGE SECTION.
  24.        77  LEE-TODO                 PIC X VALUE 'N'.
  25.  
  26.        PROCEDURE DIVISION.
  27.        INICIO-PROGRAMA.
  28.            PERFORM PROCEDIMIENTO-APERTURA.
  29.            PERFORM LEE-SIGUIENTE-REGISTRO UNTIL LEE-TODO = 'S'.
  30.            PERFORM PROCEDIMIENTO-DE-CIERRE.
  31.            STOP RUN.
  32.  
  33.        PROCEDIMIENTO-APERTURA.
  34.            OPEN I-O EMPLEADOS-ARCHIVO.
  35.  
  36.        PROCEDIMIENTO-DE-CIERRE.
  37.            CLOSE EMPLEADOS-ARCHIVO.
  38.  
  39.        MUESTRA-CAMPOS.
  40.            DISPLAY "ID: " EMPLEADOS-ID.
  41.            DISPLAY "Nombre: " EMPLEADOS-NOMBRE.
  42.            DISPLAY "Apellidos: " EMPLEADOS-APELLIDOS.
  43.            DISPLAY "Edad: " EMPLEADOS-EDAD.
  44.            DISPLAY "Telefono: " EMPLEADOS-TELEFONO.
  45.            DISPLAY "Direccion: " EMPLEADOS-DIRECCION.
  46.  
  47.        LEE-SIGUIENTE-REGISTRO.
  48.            READ EMPLEADOS-ARCHIVO NEXT RECORD
  49.                AT END
  50.                    MOVE 'S' TO LEE-TODO
  51.                NOT AT END
  52.                    PERFORM MUESTRA-CAMPOS
  53.            END-READ.
dariodr is offline   Responder Con Cita
  #5
Antiguo 10 de marzo de 2023, 10:23
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@dariodr ya le vas pillando un poco el aire al tema, ánimo que no es difícil , ahora el problema que tienes es que, si hay más de un registro, te va a "pegar" un pantallazo mostrando los datos y va a ir al siguiente registro, o como es en éste caso, te va a hacer un "scroll" la pantalla, mostrándote un registro tras otro, sin darte tiempo a leerlos, así, hasta que llegues al final del fichero, deberías poner un ACCEPT en LEE-SIGUIENTE-REGISTRO, para que se pare a cada lectura y el operador, tenga que pulsar una tecla para ir al siguiente registro, yo incluiría esto

en la WORKING-STORAGE SECTION

Código COBOL:
  1. 01  TECLA                                   PIC X VALUE SPACES.

y después de END-READ, (al final de LEE-SIGUIENTE-REGISTRO),

Código COBOL:
  1. DISPLAY "Pulse 'F' para terminar, otra tecla para continuar ... " WITH NO ADVANCING.
  2. ACCEPT TECLA.
  3. DISPLAY " ".       *> Éste DSIPLAY, es para que haya una línea de separación entre registros
  4. IF TECLA = "F" OR TECLA = "f"
  5.     MOVE "S" TO LEE-TODO
  6. ELSE
  7.     MOVE SPACES TO TECLA LEE-TODO
  8. END-IF.

Un salu2.-
Josber 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 15:44.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.