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.
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
0