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