Cobol - Suprimir un archivo indexado, a partir de un archivo secuencial.

 
Vista:

Suprimir un archivo indexado, a partir de un archivo secuencial.

Publicado por Patricia (2 intervenciones) el 20/10/2011 15:37:40
Hola, me gustaría encontrar alguien que pueda ayudarme con este tema que me lleva dando quebradero de cabeza. Necesito dar de baja (suprimir) un registro ya existente de un fichero secuencial indexado, a partir de un fichero secuencial de transacciones, claro, Tendiendo en cuenta las posibles situaciones de errores posible, yo sólo tengo en cuenta si NO existe el registro). Por favor necesito aclarar esta duda, corregir lo que esta mal.

IDENTIFICATION DIVISION.
PROGRAM-ID. Practica.
REMARKS. Tratamiento para bajas.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

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

INPUT-OUTPUT SECTION.
FILE-CONTROL.

SELECT A-TRANSACCIONES
ASSIGN TO DISK ' TRANSACCIONES.DAT'
ORGANIZATION LINE SEQUENTIAL
ACCESS SEQUENTIAL.

SELECT A-CLIENTE ASSIGN TO DISK 'CLIENTE.DAT'
ORGANIZATION INDEXED
ACCESS DYNAMIC
RECORD KEY CODCLI
ALTERNATE RECORD KEY NOMCLI DUPLICATES.

*/Fichero Secuencial Indexado (Cliente):
FD CLIENTE
LABEL RECORD STANDARD.
01 R-CLIENTE.
02 COD-CLI PIC X(8). */Clave/*
02 NOM-CLI PIC X(15).
02 DIR-CLI PIC X(45).
02 CIU-CLI PIC X(45).
02 ALT-CLI
03 ANIO PIC X(4).
03 MES PIC X(2).
03 DIA PIC X(2).


WORKING-STORAGE SECTION.
* / Variables para la lectura.*/
77 FIN-TRAN PIC X.
77 FIN-CLI PIC X.


* /Fichero Secuencial (Transacciones):
FD TRANSACCIONES
LABEL RECORD STANDARD.
01 R-TRANSACCIONES.
02 TIP-TRA PIC X. */ Tipo de transacción (B) Bajas. /*
02 COD-TRA PIC X(8).
02 NOM-TRA PIC X(15).

* / Lectura del archivo secuencial de transacciones /*
READ A-TRANSACCIONES AT END MOVE 'S' TO FIN-TRA
END-READ
PERFORM UNTIL FIN-TRA = 'S'
IF TIP-TRA = 'B' OR 'b' THEN
MOVE COD-TRA TO XCODIGO
READ A-TRANSACCIONES AT END MOVE 'S' TO FIN-TRA
END-READ
END-IF
END-PERFORM.

*/ Lectura del fichero indexado de clientes /*
READ CLIENTE NEXT RECORD AT END MOVE 'S' TO FIN-CLI
END-READ.
PERFORM UNTIL FIN-CLI = 'S'
IF CODCLI OF R-CLIENTE = XCODIGO THEN
DELETE CLIENTE
INVALID KEY
DISPLAY 'El cliente NO existe.'
NOT INVALID KEY
DISPLAY 'Registros borrado con exito.'
READ CLIENTE NEXT RECORD AT END MOVE 'S' TO FIN-CLI
END-READ
END-DELETE
END-IF
END-PERFORM.

CLOSE A-TRANSACCIONES.
CLOSE A-CLIENTE.
STOP RUN.

De antemano muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Suprimir un archivo indexado, a partir de un archivo secuencial.

Publicado por Oscar (12 intervenciones) el 27/10/2011 19:59:45
Proba con esto

PROCEDURE ...

OPEN INPUT A-TRANSACCIONES
I-O A-CLIENTE.
LEO.
READ A-TRANSACCIONES AT END GO FIN END-READ
IF TIP-TRA = "b" OR "B"
MOVE COD-TRA TO COD-CLI
READ A-CLIENTE INVALID
DISPLAY "CLIENTE INEXISTENTE " COD-TRA
NOT INVALID
DELETE A-CLIENTE INVALID
DISPLAY "NO PUEDO BORRAR CLIENTE " COD-TRA
NOT INVALID
DISPLAY "EL CLIENTE " COD-TRA " SE ELIMINO CORRECTAMENTE"
END-DELETE
END-READ
END-IF
GO LEO.
FIN.
CLOSE A-TRANSACCIONES A-CLIENTE
STUP RUN.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suprimir un archivo indexado, a partir de un archivo secuencial.

Publicado por Patricia (2 intervenciones) el 05/11/2011 11:55:52
Muchas gracias Oscar por tu aportación, tu explicación me es de mucha ayuda.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar