Foro de Cobol
Registrate en el Foro de Cobol y Aporta tus experiencias y conocimientos sobre este lenguaje de programacion, con tu ayuda el foro crecera y todos nos podremos beneficiar de los conocimientos de los demas.

Gracias por entrar a COBOLEROS.ES
Síguenos en Twitter

Error 23 con archivo relativo

Ver el tema anterior Ver el tema siguiente Ir abajo

Error 23 con archivo relativo

Mensaje por Jh0an1 el Dom Nov 25, 2012 3:37 am

Buenos días,

Soy novato programando en COBOL.

Estoy elaborando una tarea para la universidad consistente en un programa para llevar el control de ventas de una farmacia.

El registro de los clientes se debe almacenar en un archivo relativo cuya clave es el número del documento de identidad del cliente.

El archivo es creado en un pequeño programa auxiliar que además crea e inicializa con campos vacíos los 317 registros. Funciona bien (verificándolo con otro programa auxiliar para leer el contenido del archivo CLIENTES.DAT).

Posteriormente, en el programa principal, se realiza el trabajo de registro propiamente dicho.

Con el primer cliente aparentemente funciona bien, pero luego al intentar registrar un segundo cliente se genera un error de entrada/salida cód. 23. Este error se presenta cuando el registro solicitado no existe. Pareciera como si al escribir los datos del primer cliente se dañara la integridad del archivo externo.

Estaría muy agradecido si alguien me pudiera ayudar con las posibles causas de este error. Llevo dos días tratando de resolver este asunto.

A continuación, la estructura del archivo:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARCH-CLIENTES ASSIGN TO
'C:\RMCOBOL\CLIENTES.DAT'
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS DIREC-REL-CLTE
FILE STATUS IS ESTATUS-CLTE.

DATA DIVISION.
FILE SECTION.
FD ARCH-CLIENTES
LABEL RECORD STANDARD
DATA RECORD REG-CLIENTE.

01 REG-CLIENTE.
05 NRO-CEDULA-CLTE PIC 9(Cool.
05 NOMBRES-CLTE PIC X(20).
05 APELLIDOS-CLTE PIC X(25).
05 DIREC-RESID-CLTE PIC X(45).
05 NRO-TELEF-FIJO-CLTE PIC X(11).
05 NRO-TELEF-CEL-CLTE PIC X(11).
05 SITUACION-REG-CLTE PIC X.
88 REG-CLTE-LIBRE VALUE ' '.
88 REG-CLTE-OCUPADO VALUE '*'.

Cualquier información adicional que sea de utilidad, la puedo remitir por esta vía o por correo.

Gracias enormes.

Jh0an1

Mensajes : 3
Reputación : 0
Fecha de inscripción : 25/11/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: Error 23 con archivo relativo

Mensaje por Coboler@ el Lun Nov 26, 2012 8:05 am

Buenas,

Puedes escribir el código fuente con el cual lees el fichero de entrada, y también si es posible el código fuente con el cual escribes en el fichero de salida.
avatar
Coboler@
Admin

Mensajes : 215
Reputación : 19
Fecha de inscripción : 02/02/2011
Edad : 37
Localización : Madrid

Ver perfil de usuario http://www.coboleros.es

Volver arriba Ir abajo

Error 23 con Archivos Relativos

Mensaje por Jh0an1 el Dom Mar 17, 2013 7:28 am

Coboler@ escribió:Buenas,

Puedes escribir el código fuente con el cual lees el fichero de entrada, y también si es posible el código fuente con el cual escribes en el fichero de salida.


Saludos, Coboler@,

Gracias por tu ayuda. El fin de año, y varios proyectos me obligaron a suspender esta actividad, y ahora la estoy retomando.

A continuación, el programa que hace la lectura:

* ==============================================================

IDENTIFICATION DIVISION.

PROGRAM-ID. LEEURDN.


* ==============================================================
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARCH-CLIENTES ASSIGN TO 'C:\RMCOBOL\CLIENTES.DAT'
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS DIREC-REL-CLTE
FILE STATUS IS ESTATUS-CLTE.


* ==============================================================
DATA DIVISION.
*................................................................
FILE SECTION.
* Declaración de los archivos
* Archivo CLIENTES
FD ARCH-CLIENTES
LABEL RECORD STANDARD
DATA RECORD REG-CLIENTE.
01 REG-CLIENTE.
05 NRO-CEDULA-CLTE PIC 9(Cool.
05 NOMBRES-CLTE PIC X(20).
05 APELLIDOS-CLTE PIC X(25).
05 DIREC-RESID-CLTE PIC X(45).
05 NRO-TELEF-FIJO-CLTE PIC X(11).
05 NRO-TELEF-CEL-CLTE PIC X(11).
05 SITUACION-REG-CLTE PIC X.
88 REG-CLTE-LIBRE VALUE ' '.
88 REG-CLTE-OCUPADO VALUE '*'.

*................................................................

WORKING-STORAGE SECTION.
* Declaración de variables
77 DIREC-REL-CLTE PIC 999 VALUE 0.
77 ESTATUS-CLTE PIC XX.
77 CUALQR-TECLA PIC X VALUE ' '.

* Declaración de constantes
77 DIVISOR-CLTES PIC 999 VALUE 317.
* ===============================================================

PROCEDURE DIVISION.

PROCEDIMIENTO-PRINCIPAL.
OPEN INPUT ARCH-CLIENTES.
DISPLAY ' ' LINE 1 POSITION 1 ERASE EOS.

PERFORM
MOSTRAR-REGISTRO
VARYING DIREC-REL-CLTE FROM 1 BY 1
UNTIL DIREC-REL-CLTE >= DIVISOR-CLTES.

MOSTRAR-REGISTRO.
DISPLAY 'Registro Nro. ' DIREC-REL-CLTE.
READ ARCH-CLIENTES.
IF ESTATUS-CLTE = '00' THEN DISPLAY 'OK'.
IF ESTATUS-CLTE = '23' THEN DISPLAY 'NO-EXISTE'.
DISPLAY 'Nombres : |' NOMBRES-CLTE '|'.
DISPLAY 'Apellidos Neutral' APELLIDOS-CLTE '|'.
DISPLAY 'Direc. Resid. Neutral' DIREC-RESID-CLTE '|'.
DISPLAY 'Nro. Telef. Fijo: |' NRO-TELEF-FIJO-CLTE '|'.
DISPLAY 'Nro. Telef. Cel.: |' NRO-TELEF-CEL-CLTE '|'.
DISPLAY 'Situacion Reg.: |' SITUACION-REG-CLTE '|'.
DISPLAY ' '.
DISPLAY 'Presiona cualquier tecla ...'.
ACCEPT CUALQR-TECLA.
* NO BEEP OFF.

*................................................................
* Fin del programa
END PROGRAM LEEURDN.

A continuación el fragmento del código del procedimiento que genera el error, en el programa principal.

Te agradecería cualquier sugerencia o comentario.

Muchas gracias por tu ayuda.

* INICIO DEL FRAGMENTO DE CÓDIGO

BUSCAR-CLIENTE.
OPEN INPUT ARCH-CLIENTES.
DISPLAY 'Archivo abierto, lectura'.
MOVE '?' TO BAND-CLTE-ENCONTRADO.

DIVIDE DIVISOR-CLTES INTO NRO-CEDULA-BUSCADO
GIVING COCIENTE-CLTE REMAINDER DIREC-ORIGEN-CLTE.

ADD 1 TO DIREC-ORIGEN-CLTE.

MOVE DIREC-ORIGEN-CLTE TO DIREC-REL-CLTE.
READ ARCH-CLIENTES.

PERFORM
RASTREAR-REGS-BUSQ-CLTE
WITH TEST AFTER
UNTIL DIREC-REL-CLTE = DIREC-ORIGEN-CLTE OR
BAND-CLTE-ENCONTRADO = 'S' OR
BAND-CLTE-ENCONTRADO = 'N'.

IF BAND-CLTE-ENCONTRADO = '?'
THEN
MOVE 'N' TO BAND-CLTE-ENCONTRADO
END-IF.
CLOSE ARCH-CLIENTES.

Jh0an1

Mensajes : 3
Reputación : 0
Fecha de inscripción : 25/11/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: Error 23 con archivo relativo

Mensaje por Jh0an1 el Dom Mar 17, 2013 7:50 am

[quote="Jh0an1"]
Coboler@ escribió:Buenas,

Puedes escribir el código fuente con el cual lees el fichero de entrada, y también si es posible el código fuente con el cual escribes en el fichero de salida.


Saludos, Coboler@,

El programa inicial de mi mensaje anterior es el que muestra los datos cargados en un archivo previamente generado.

El programa que verdaderamente lee los datos es el siguiente:



* ==============================================================
IDENTIFICATION DIVISION.
PROGRAM-ID. LEEURDN.
* ==============================================================



ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARCH-CLIENTES ASSIGN TO 'C:\RMCOBOL\CLIENTES.DAT'
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS DIREC-REL-CLTE
FILE STATUS IS ESTATUS-CLTE.

* ===============================================================

DATA DIVISION.
*................................................................

FILE SECTION.
* Declaración de los archivos
* Archivo CLIENTES

FD ARCH-CLIENTES
LABEL RECORD STANDARD
DATA RECORD REG-CLIENTE.

01 REG-CLIENTE.
05 NRO-CEDULA-CLTE PIC 9(Cool.
05 NOMBRES-CLTE PIC X(20).
05 APELLIDOS-CLTE PIC X(25).
05 DIREC-RESID-CLTE PIC X(45).
05 NRO-TELEF-FIJO-CLTE PIC X(11).
05 NRO-TELEF-CEL-CLTE PIC X(11).
05 SITUACION-REG-CLTE PIC X.
88 REG-CLTE-LIBRE VALUE ' '.
88 REG-CLTE-OCUPADO VALUE '*'.

*................................................................
WORKING-STORAGE SECTION.
* Declaración de variables

77 DIREC-REL-CLTE PIC 999 VALUE 0.
77 ESTATUS-CLTE PIC XX.
77 CUALQR-TECLA PIC X VALUE ' '.

* Declaración de constantes
77 DIVISOR-CLTES PIC 999 VALUE 317.
* ===============================================================

PROCEDURE DIVISION.
PROCEDIMIENTO-PRINCIPAL.
OPEN INPUT ARCH-CLIENTES.
DISPLAY ' ' LINE 1 POSITION 1 ERASE EOS.
PERFORM
MOSTRAR-REGISTRO
VARYING DIREC-REL-CLTE FROM 1 BY 1
UNTIL DIREC-REL-CLTE >= DIVISOR-CLTES.

MOSTRAR-REGISTRO.
DISPLAY 'Registro Nro. ' DIREC-REL-CLTE.
READ ARCH-CLIENTES.
IF ESTATUS-CLTE = '00' THEN DISPLAY 'OK'.
IF ESTATUS-CLTE = '23' THEN DISPLAY 'NO-EXISTE'.
DISPLAY 'Nombres : |' NOMBRES-CLTE '|'.
DISPLAY 'Apellidos Neutral' APELLIDOS-CLTE '|'.
DISPLAY 'Direc. Resid. Neutral' DIREC-RESID-CLTE '|'.
DISPLAY 'Nro. Telef. Fijo: |' NRO-TELEF-FIJO-CLTE '|'.
DISPLAY 'Nro. Telef. Cel.: |' NRO-TELEF-CEL-CLTE '|'.
DISPLAY 'Situacion Reg.: |' SITUACION-REG-CLTE '|'.
DISPLAY ' '.
DISPLAY 'Presiona cualquier tecla ...'.
ACCEPT CUALQR-TECLA.
* NO BEEP OFF.

*................................................................
* Fin del programa
END PROGRAM LEEURDN.

Jh0an1

Mensajes : 3
Reputación : 0
Fecha de inscripción : 25/11/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: Error 23 con archivo relativo

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.