PDA

Ver la Versión Completa : [Duda] Buscar un Registro


dariodr
8 de mayo de 2024, 20:16
Buenas amigos coboleros, una pregunta: como hago para buscar un registro dentro de un archivo.
Tengo este codigo, a veces funciona a veces no, que le falta o que error ven en el codigo.
Saludos.
IDENTIFICATION DIVISION.
PROGRAM-ID. prg002.

ENVIRONMENT DIVISION.
INPUT-OUTPUT section.
FILE-CONTROL.
SELECT agenda ASSIGN to "agenda.txt"
ORGANIZATION LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD agenda.
01 agenda-rec.
03 codigo PIC 9(5).
03 nombre PIC x(10).
03 salario pic 9(5)V99.
WORKING-STORAGE SECTION.
77 FIN-ARCHIVO PIC x.
77 N-NOMBRE PIC X(10).

PROCEDURE DIVISION.
MAIN-PROCEDURE.
OPEN INPUT agenda.
PERFORM proceso UNTIL FIN-ARCHIVO = 'S'.
CLOSE agenda.
STOP RUN.

proceso.
READ agenda
AT END MOVE 'S' TO FIN-ARCHIVO
NOT AT END PERFORM BUSCA-REGISTRO
END-READ.

*Rutina para buscar un registro
BUSCA-REGISTRO.
DISPLAY 'NOMBRE A BUSCAR: ' NO ADVANCING.
ACCEPT N-NOMBRE.
IF N-NOMBRE = nombre
DISPLAY codigo
DISPLAY salario
END-IF.



END PROGRAM prg002.



El contenido es este:

00001Dario 0058421
00002Luis 0078436
00003Pedro 0058725
00004Jorge 0058766

Estoy buscando por nombre.

JCantero
8 de mayo de 2024, 23:08
@dariodr, Es que pides el nombre con cada read.

Pide el nombre y después comprueba si está.

Así


IDENTIFICATION DIVISION.
PROGRAM-ID. prg002.

ENVIRONMENT DIVISION.
INPUT-OUTPUT section.
FILE-CONTROL.
SELECT agenda ASSIGN to "agenda.txt"
ORGANIZATION LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD agenda.
01 agenda-rec.
03 codigo PIC 9(5).
03 nombre PIC x(10).
03 salario pic 9(5)V99.
WORKING-STORAGE SECTION.
77 FIN-ARCHIVO PIC x.
77 N-NOMBRE PIC X(10).

PROCEDURE DIVISION.
MAIN-PROCEDURE.

perform aceptar-nombre.


OPEN INPUT agenda.

PERFORM proceso UNTIL FIN-ARCHIVO = 'S'.
CLOSE agenda.
STOP RUN.

proceso.
READ agenda
AT END MOVE 'S' TO FIN-ARCHIVO
NOT AT END PERFORM BUSCA-REGISTRO
END-READ.

Aceptar-nombre.
DISPLAY 'NOMBRE A BUSCAR: ' NO ADVANCING.
ACCEPT N-NOMBRE.



*Rutina para buscar un registro
BUSCA-REGISTRO.

IF N-NOMBRE = nombre
DISPLAY codigo
DISPLAY salario
END-IF.



END PROGRAM prg002.