Ver Mensaje Individual
  #2
Antiguo 11 de abril de 2024, 12:17
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 02.10.2026 11:51
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Hola @JonathanDemons_123,

A ver, sí, por supuesto que primero un START y después un READ, por lógica, primero posicionas el "puntero" en el lugar que quieres y después haces la lectura. Sin ver el código, te lee un sólo registro, porque haces un READ normal y corriente, y tienes que hacer el READ con un NEXT/PREVIOUS, en los que no hace falta incrementar nada, el propio compilador es el que se encarga de ir hacia adelante o hacia atrás de forma automática, (depende del parámetro usado), la manera más sencilla de hacerlo es:

Vamos a suponer que tienes un fichero con 500 registros, numerados del 1 al 500 consecutivos y, que quieres leer a partir del registro 333 hasta el último:

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2. 01  EOF                    PIC 9.
  3. 01  STFILE                PIC XX.      *> FILE-STATUS del fichero
  4. .
  5. .
  6. .
  7. PROCEDURE DIVISION.
  8. INICIO.
  9.      MOVE 333 TO NUMKEY.
  10.      INITIALIZE EOF.
  11.      OPEN INPUT FICHERO.
  12.      PERFORM POSICIONAR.
  13.      PERFORM LEER UNTIL EOF = 1.
  14.      CLOSE FICHERO.
  15.      STOP RUN.
  16. POSICIONAR.
  17.      START FICHERO
  18.                KEY NOT LESS NUMKEY
  19.                      INVALID KEY DISPLAY "Error de posicionamiento... " STFILE
  20.                                   CLOSE FICHERO
  21.                                   STOP RUN
  22.      END-START.
  23. LEER.
  24.      READ FICHERO
  25.               NEXT RECORD
  26.                       AT END
  27.                           MOVE 1 TO EOF
  28.                           DISPLAY "Fin fichero ..."
  29.                       NOT AT END
  30.                              PERFORM HACER-COSAS THRU FIN-HACER
  31.      END-READ.
  32. HACER-COSAS.
  33. .
  34. .
  35. .
  36. .
  37. .
  38. HACER-MAS-COSAS.
  39. .
  40. .
  41. .
  42. .
  43. FIN-HACER.
  44.     EXIT.

Si cambias NEXT por PREVIOUS, leerá el fichero al revés y, cuando llegue al principio, (sentencia AT END), terminará la lectura, aunque, no todos los compiladores, soportan la cláusula de lectura inversa

Un saludo y, si tienes más dudas, ya sabes por donde andamos.
Josber is offline   Responder Con Cita