@Marengo97, te explico.
Tu has hecho un bucle y siempre lees el mismo registro con el contenido de la clave "libro-id". No cambias libro-id. Otra cosa es que cambiaras el valor aumentandolo, pero realmente tendrias lecturas fallidas.
Cuando quieres recorrer un fichero completamente:
1) realiza un start con la clave deseada, para poner el cursor de lectura al principio. Aunque tu lo abres y se supone que esta al principio. Si tuvieras varias claves en el fichero, libro-id, nombre, editorial podrias leer secuencialmente por esa clave. Incluso no desde el principio sino desde un a determinada posicion.
2) read next lee el siguiente por la clave especificada en el start. Cuando llega al final mete un 10 en el file status.
NOTA. Para este bucle de lectura es recomendable hacer un "OPEN INPUT" en vez de "OPEN I-O" porque si hay varios usuarios trabajando te podrias encontrar un registro bloqueado. Entonces la solucion es leer con una apertura "open input" si no tendrias que hacer lecturas con la clausula "with no lock" para no bloquear registros ni encontrartelos bloqueados.
- - - Updated - - -
Metidos en el tema, suponte que deseas seleccionar un intevalo de libros:
accept libro-desde
accept libro-hasta
Código COBOL:
VER-LIBROS.
PERFORM LIMPIAR-PANTALLA
PERFORM ABRIR-IO-ARCHIVO
IF F-NOEXISTE-REG THEN
PERFORM LIMPIAR-PANTALLA
DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS" AT LINE 1
COL 1
DISPLAY "PRESIONE ENTER PARA VOLVER AL MENU()" AT LINE 10
COL 1
ACCEPT OPC AT LINE 11 COL 36
ELSE
PERFORM LIMPIAR-PANTALLA
move libro desde to libro-id
if libro-hasta = 0 then move 999 to libro-hasta end-if
start reg-libros key is >= libro-id end-start
READ REG-LIBROS next record end-read
PERFORM VARYING N FROM 1 BY 1 UNTIL fin-reg or libro-id > libro-hasta
DISPLAY DATOS-LIBRO AT LINE N COL 1
READ REG-LIBROS next record end-read
END-PERFORM
ADD 1 TO N
DISPLAY "PRESIONE ENTER PARA REGRESAR AL MENU" AT LINE N
COL 1
ACCEPT OPC AT LINE 15
PERFORM CERRAR-ARCHIVO
END-IF.