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:
WORKING-STORAGE SECTION.
01 EOF PIC 9.
01 STFILE PIC XX. *> FILE-STATUS del fichero
.
.
.
PROCEDURE DIVISION.
INICIO.
MOVE 333 TO NUMKEY.
INITIALIZE EOF.
OPEN INPUT FICHERO.
PERFORM POSICIONAR.
PERFORM LEER UNTIL EOF = 1.
CLOSE FICHERO.
STOP RUN.
POSICIONAR.
START FICHERO
KEY NOT LESS NUMKEY
INVALID KEY DISPLAY "Error de posicionamiento... " STFILE
CLOSE FICHERO
STOP RUN
END-START.
LEER.
READ FICHERO
NEXT RECORD
AT END
MOVE 1 TO EOF
DISPLAY "Fin fichero ..."
NOT AT END
PERFORM HACER-COSAS THRU FIN-HACER
END-READ.
HACER-COSAS.
.
.
.
.
.
HACER-MAS-COSAS.
.
.
.
.
FIN-HACER.
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.