Ver Mensaje Individual
  #12
Antiguo 10 de febrero de 2022, 20:50
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 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Citación del post de DestinedBroken Ver Mensaje
hay 2 en concreto que no muestra, "se los salta" por así decirlo
A ver Destined, esos que se "salta", creo que no es que se los salte, si no que la condición que le has puesto al contador con MAXIMO-REGISTROS = 5, (en la línea tuya número 41), creo que debe de ser 4 en vez de 5, ya que no te cogen 5 registros en pantalla, las pantallas en modo texto, como máximo admiten 24 líneas x 80 columnas, (25 x 132 en algunas tty's especiales), y tú muestras 5 registros a 6 líneas por registro, son 30 líneas, te sobran 6.

He copiado tu código lo he modificado un poco, y sin modificarlo, funciona correctamente, yo lo he modificado para esclarecerlo un poco, poner (puntos, ect) a mi me ha quedado así y funciona perfectamente

Código COBOL:
  1.        identification division.
  2.        program-id. BB-DD-2.
  3.  
  4.        environment division.
  5.        configuration section.
  6.        input-output section.
  7.        file-control.
  8.            select optional empleados-archivo
  9.            assign to "f:\empleados-escritura.dat"
  10.            organization is line sequential.
  11.  
  12.        data division.
  13.        file section.
  14.        fd empleados-archivo.
  15.        01 empleados-registro.
  16.          05 empleados-id pic x(6).
  17.          05 empleados-nombre pic x(25).
  18.          05 empleados-apellidos pic x(35).
  19.          05 empleados-edad pic x(3).
  20.          05 empleados-telefono pic x(9).
  21.          05 empleados-direccion pic x(35).
  22.  
  23.        working-storage section.
  24.  
  25.        01 FIN-DEL-ARCHIVO PIC X value "1".
  26.        01 MAXIMO-REGISTROS PIC 99 value zeroes.
  27.        01 siguiente PIC X.
  28.  
  29.        procedure division.
  30.        empieza-programa.
  31.            move zeroes to MAXIMO-REGISTROS.
  32.            open input empleados-archivo.
  33.      *    perform lee-siguiente-registro
  34.      *    perform muestra-campos
  35.            perform lee-siguiente-registro
  36.                    until fin-del-archivo = "0".
  37.            close empleados-archivo.
  38.            stop run.
  39.  
  40.        muestra-campos.
  41.            if MAXIMO-REGISTROS = 4
  42.                perform siguiente-pagina
  43.            end-if.
  44.            display "ID:" empleados-id
  45.            display "Nombre:" empleados-nombre
  46.            display "Apellidos:" empleados-apellidos
  47.            display "Edad:" empleados-edad
  48.            display "Telefono:" empleados-telefono
  49.            display "Direccion:" empleados-direccion.
  50.            
  51.            ADD 1 TO MAXIMO-REGISTROS.
  52.  
  53.        lee-siguiente-registro.
  54.            read empleados-archivo next record
  55.                at end
  56.                    move "0" to FIN-DEL-ARCHIVO
  57.                    display "*****FIN DEL FICHERO******"
  58.                not at end
  59.                   perform muestra-campos
  60.            end-read.
  61.  
  62.        siguiente-pagina.
  63.            display
  64.              "Presiona ENTER para ver la siguiente pagina...".
  65.            accept siguiente no beep.
  66.            move zeroes to MAXIMO-REGISTROS.
  67.      *
  68.        end program BB-DD-2.

Te he "anulado", esa doble lectura que haces al principio del programa, primero lees un registro y luego creas un bucle para leer desde el segundo hasta el último, no entiendo por qué lo haces así, pero desde luego, no es lo correcto. La anulación ha sido "comentando" la línea, no sé si te habrán explicado para qué sirve la columna 7 pero, entre otras muchas cosas, cuando pones un asterisco en esa columna, esa línea pasa a ser ignorada por el compilador, es lo que se llama comentar una línea.
El "no beep", que he puesto al final del ACCEPT, es para que no pite cada vez que pida pulsar la tecla

Dime si hay algo que no entiendas o no tengas claro.

Un salu2.-
Josber is offline   Responder Con Cita