dariodr
9 de marzo de 2023, 03:50
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL EMPLEADOS-ARCHIVO
ASSIGN TO "emple.dat"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMPLEADOS-ARCHIVO.
01 EMPLEADOS-REGISTRO.
05 EMPLEADOS-ID PIC X(6).
05 EMPLEADOS-NOMBRE PIC X(25).
05 EMPLEADOS-APELLIDOS PIC X(35).
05 EMPLEADOS-EDAD PIC X(3).
05 EMPLEADOS-TELEFONO PIC X(9).
05 EMPLEADOS-DIRECCION PIC X(35).
WORKING-STORAGE SECTION.
01 IDENTIFICADOR PIC X(37)
VALUE "Introduce un ID del nuevo empleado: ".
01 NOMBRE PIC X(35)
VALUE "Introduce un nombre del empleado: ".
01 APELLIDOS PIC X(25)
VALUE "Introduce los apellidos: ".
01 EDAD PIC X(20)
VALUE "Introduce la edad: ".
01 TELEFONO PIC X(33)
VALUE "Introduce un numero de telefono: ".
01 DIRECCION PIC X(26)
VALUE "Introduce una direccion: ".
01 SI-NO PIC X.
01 ENTRADA PIC X.
PROCEDURE DIVISION.
INICIO-PROGRAMA.
PERFORM PROCEDIMIENTO-APERTURA.
MOVE "S" TO SI-NO.
PERFORM AGREGAR-REGISTROS UNTIL SI-NO = "N".
PERFORM PROCEDIMIENTO-CIERRE.
FIN-PROGRAMA.
STOP RUN.
PROCEDIMIENTO-APERTURA.
OPEN EXTEND EMPLEADOS-ARCHIVO.
PROCEDIMIENTO-CIERRE.
CLOSE EMPLEADOS-ARCHIVO.
AGREGAR-REGISTROS.
MOVE "N" TO ENTRADA.
PERFORM OBTENER-CAMPOS UNTIL ENTRADA = "S".
PERFORM ESCRIBIR-REGISTRO.
PERFORM REINICIAR.
OBTENER-CAMPOS.
MOVE SPACE TO EMPLEADOS-REGISTRO.
DISPLAY IDENTIFICADOR " ? ".
ACCEPT EMPLEADOS-ID.
DISPLAY NOMBRE " ? ".
ACCEPT EMPLEADOS-NOMBRE.
DISPLAY APELLIDOS " ? ".
ACCEPT EMPLEADOS-APELLIDOS.
DISPLAY EDAD " ? ".
ACCEPT EMPLEADOS-EDAD.
DISPLAY TELEFONO "?".
ACCEPT EMPLEADOS-TELEFONO
DISPLAY DIRECCION.
ACCEPT EMPLEADOS-DIRECCION.
PERFORM CONTINUAR.
CONTINUAR.
MOVE "S" TO ENTRADA.
IF EMPLEADOS-NOMBRE = SPACE
MOVE "N" TO ENTRADA
END-IF.
ESCRIBIR-REGISTRO.
WRITE EMPLEADOS-REGISTRO.
REINICIAR.
DISPLAY "Desea almacenar otro registro s/n".
ACCEPT SI-NO.
IF SI-NO = "s"
MOVE "S" TO SI-NO.
IF SI-NO NOT = "S"
MOVE "N" TO SI-NO.
Codigo para leer archivo
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLEADOS-ARCHIVO
ASSIGN TO "emple.dat"
ORGANIZATION IS INDEXED
RECORD KEY IS EMPLEADOS-ID
ACCESS MODE IS DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD EMPLEADOS-ARCHIVO.
01 EMPLEADOS-REGISTRO.
05 EMPLEADOS-ID PIC X(6).
05 EMPLEADOS-NOMBRE PIC X(25).
05 EMPLEADOS-APELLIDOS PIC X(35).
05 EMPLEADOS-EDAD PIC X(3).
05 EMPLEADOS-TELEFONO PIC X(9).
05 EMPLEADOS-DIRECCION PIC X(35).
WORKING-STORAGE SECTION.
77 LEE-TODO PIC X.
PROCEDURE DIVISION.
INICIO-PROGRAMA.
PERFORM PROCEDIMIENTO-APERTURA.
MOVE "0" TO LEE-TODO.
PERFORM LEE-SIGUIENTE-REGISTRO.
IF LEE-TODO = "1"
DISPLAY "No se encontraron registros en el archivo."
ELSE
PERFORM MUESTRA-CAMPOS UNTIL LEE-TODO = "1".
PERFORM PROCEDIMIENTO-DE-CIERRE.
STOP RUN.
PROCEDIMIENTO-APERTURA.
OPEN I-O EMPLEADOS-ARCHIVO.
PROCEDIMIENTO-DE-CIERRE.
CLOSE EMPLEADOS-ARCHIVO.
MUESTRA-CAMPOS.
DISPLAY "ID: " EMPLEADOS-ID.
DISPLAY "Nombre: " EMPLEADOS-NOMBRE.
DISPLAY "Apellidos: " EMPLEADOS-APELLIDOS.
DISPLAY "Edad: " EMPLEADOS-EDAD.
DISPLAY "Telefono: " EMPLEADOS-TELEFONO.
DISPLAY "Direccion: " EMPLEADOS-DIRECCION.
LEE-SIGUIENTE-REGISTRO.
READ EMPLEADOS-ARCHIVO NEXT RECORD
AT END MOVE "1" TO LEE-TODO.
Error que aparece en rmcobol
888
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL EMPLEADOS-ARCHIVO
ASSIGN TO "emple.dat"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD EMPLEADOS-ARCHIVO.
01 EMPLEADOS-REGISTRO.
05 EMPLEADOS-ID PIC X(6).
05 EMPLEADOS-NOMBRE PIC X(25).
05 EMPLEADOS-APELLIDOS PIC X(35).
05 EMPLEADOS-EDAD PIC X(3).
05 EMPLEADOS-TELEFONO PIC X(9).
05 EMPLEADOS-DIRECCION PIC X(35).
WORKING-STORAGE SECTION.
01 IDENTIFICADOR PIC X(37)
VALUE "Introduce un ID del nuevo empleado: ".
01 NOMBRE PIC X(35)
VALUE "Introduce un nombre del empleado: ".
01 APELLIDOS PIC X(25)
VALUE "Introduce los apellidos: ".
01 EDAD PIC X(20)
VALUE "Introduce la edad: ".
01 TELEFONO PIC X(33)
VALUE "Introduce un numero de telefono: ".
01 DIRECCION PIC X(26)
VALUE "Introduce una direccion: ".
01 SI-NO PIC X.
01 ENTRADA PIC X.
PROCEDURE DIVISION.
INICIO-PROGRAMA.
PERFORM PROCEDIMIENTO-APERTURA.
MOVE "S" TO SI-NO.
PERFORM AGREGAR-REGISTROS UNTIL SI-NO = "N".
PERFORM PROCEDIMIENTO-CIERRE.
FIN-PROGRAMA.
STOP RUN.
PROCEDIMIENTO-APERTURA.
OPEN EXTEND EMPLEADOS-ARCHIVO.
PROCEDIMIENTO-CIERRE.
CLOSE EMPLEADOS-ARCHIVO.
AGREGAR-REGISTROS.
MOVE "N" TO ENTRADA.
PERFORM OBTENER-CAMPOS UNTIL ENTRADA = "S".
PERFORM ESCRIBIR-REGISTRO.
PERFORM REINICIAR.
OBTENER-CAMPOS.
MOVE SPACE TO EMPLEADOS-REGISTRO.
DISPLAY IDENTIFICADOR " ? ".
ACCEPT EMPLEADOS-ID.
DISPLAY NOMBRE " ? ".
ACCEPT EMPLEADOS-NOMBRE.
DISPLAY APELLIDOS " ? ".
ACCEPT EMPLEADOS-APELLIDOS.
DISPLAY EDAD " ? ".
ACCEPT EMPLEADOS-EDAD.
DISPLAY TELEFONO "?".
ACCEPT EMPLEADOS-TELEFONO
DISPLAY DIRECCION.
ACCEPT EMPLEADOS-DIRECCION.
PERFORM CONTINUAR.
CONTINUAR.
MOVE "S" TO ENTRADA.
IF EMPLEADOS-NOMBRE = SPACE
MOVE "N" TO ENTRADA
END-IF.
ESCRIBIR-REGISTRO.
WRITE EMPLEADOS-REGISTRO.
REINICIAR.
DISPLAY "Desea almacenar otro registro s/n".
ACCEPT SI-NO.
IF SI-NO = "s"
MOVE "S" TO SI-NO.
IF SI-NO NOT = "S"
MOVE "N" TO SI-NO.
Codigo para leer archivo
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLEADOS-ARCHIVO
ASSIGN TO "emple.dat"
ORGANIZATION IS INDEXED
RECORD KEY IS EMPLEADOS-ID
ACCESS MODE IS DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD EMPLEADOS-ARCHIVO.
01 EMPLEADOS-REGISTRO.
05 EMPLEADOS-ID PIC X(6).
05 EMPLEADOS-NOMBRE PIC X(25).
05 EMPLEADOS-APELLIDOS PIC X(35).
05 EMPLEADOS-EDAD PIC X(3).
05 EMPLEADOS-TELEFONO PIC X(9).
05 EMPLEADOS-DIRECCION PIC X(35).
WORKING-STORAGE SECTION.
77 LEE-TODO PIC X.
PROCEDURE DIVISION.
INICIO-PROGRAMA.
PERFORM PROCEDIMIENTO-APERTURA.
MOVE "0" TO LEE-TODO.
PERFORM LEE-SIGUIENTE-REGISTRO.
IF LEE-TODO = "1"
DISPLAY "No se encontraron registros en el archivo."
ELSE
PERFORM MUESTRA-CAMPOS UNTIL LEE-TODO = "1".
PERFORM PROCEDIMIENTO-DE-CIERRE.
STOP RUN.
PROCEDIMIENTO-APERTURA.
OPEN I-O EMPLEADOS-ARCHIVO.
PROCEDIMIENTO-DE-CIERRE.
CLOSE EMPLEADOS-ARCHIVO.
MUESTRA-CAMPOS.
DISPLAY "ID: " EMPLEADOS-ID.
DISPLAY "Nombre: " EMPLEADOS-NOMBRE.
DISPLAY "Apellidos: " EMPLEADOS-APELLIDOS.
DISPLAY "Edad: " EMPLEADOS-EDAD.
DISPLAY "Telefono: " EMPLEADOS-TELEFONO.
DISPLAY "Direccion: " EMPLEADOS-DIRECCION.
LEE-SIGUIENTE-REGISTRO.
READ EMPLEADOS-ARCHIVO NEXT RECORD
AT END MOVE "1" TO LEE-TODO.
Error que aparece en rmcobol
888