Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   COBOL - General (https://www.cobolforo.es/forumdisplay.php?f=44)
-   -   [Duda] Buscar un Registro (https://www.cobolforo.es/showthread.php?t=1762)

dariodr 8 de mayo de 2024 20:16

Buscar un Registro
 
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.
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. prg002.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT section.
  6.        FILE-CONTROL.
  7.            SELECT agenda ASSIGN to "agenda.txt"
  8.            ORGANIZATION LINE SEQUENTIAL.
  9.  
  10.        DATA DIVISION.
  11.        FILE SECTION.
  12.        FD  agenda.
  13.        01  agenda-rec.
  14.            03 codigo   PIC 9(5).
  15.            03 nombre   PIC x(10).
  16.            03 salario  pic 9(5)V99.
  17.        WORKING-STORAGE SECTION.
  18.        77  FIN-ARCHIVO   PIC x.
  19.        77  N-NOMBRE    PIC X(10).
  20.  
  21.        PROCEDURE DIVISION.
  22.        MAIN-PROCEDURE.
  23.            OPEN INPUT agenda.
  24.            PERFORM proceso UNTIL FIN-ARCHIVO = 'S'.
  25.            CLOSE agenda.
  26.            STOP RUN.
  27.  
  28.        proceso.
  29.            READ agenda
  30.               AT END MOVE 'S' TO FIN-ARCHIVO
  31.               NOT AT END PERFORM BUSCA-REGISTRO
  32.            END-READ.
  33.  
  34.       *Rutina para buscar un registro      
  35.        BUSCA-REGISTRO.
  36.            DISPLAY 'NOMBRE A BUSCAR: ' NO ADVANCING.
  37.            ACCEPT N-NOMBRE.
  38.            IF N-NOMBRE = nombre
  39.                DISPLAY codigo
  40.                DISPLAY salario
  41.            END-IF.
  42.  
  43.  
  44.  
  45.        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í

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. prg002.
  3.  
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT section.
  6.        FILE-CONTROL.
  7.            SELECT agenda ASSIGN to "agenda.txt"
  8.            ORGANIZATION LINE SEQUENTIAL.
  9.  
  10.        DATA DIVISION.
  11.        FILE SECTION.
  12.        FD  agenda.
  13.        01  agenda-rec.
  14.            03 codigo   PIC 9(5).
  15.            03 nombre   PIC x(10).
  16.            03 salario  pic 9(5)V99.
  17.        WORKING-STORAGE SECTION.
  18.        77  FIN-ARCHIVO   PIC x.
  19.        77  N-NOMBRE    PIC X(10).
  20.  
  21.        PROCEDURE DIVISION.
  22.        MAIN-PROCEDURE.
  23.  
  24.            perform aceptar-nombre.
  25.  
  26.  
  27.            OPEN INPUT agenda.
  28.  
  29.            PERFORM proceso UNTIL FIN-ARCHIVO = 'S'.
  30.            CLOSE agenda.
  31.            STOP RUN.
  32.  
  33.        proceso.
  34.            READ agenda
  35.               AT END MOVE 'S' TO FIN-ARCHIVO
  36.               NOT AT END PERFORM BUSCA-REGISTRO
  37.            END-READ.
  38.  
  39.        Aceptar-nombre.
  40.            DISPLAY 'NOMBRE A BUSCAR: ' NO ADVANCING.
  41.            ACCEPT N-NOMBRE.
  42.  
  43.  
  44.  
  45.       *Rutina para buscar un registro      
  46.        BUSCA-REGISTRO.
  47.          
  48.            IF N-NOMBRE = nombre
  49.                DISPLAY codigo
  50.                DISPLAY salario
  51.            END-IF.
  52.  
  53.  
  54.  
  55.        END PROGRAM prg002.


La franja horaria es GMT +2. Ahora son las 13:03.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.