Ver Mensaje Individual
  #15
Antiguo 11 de febrero de 2022, 11:22
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@DestinedBroken, a ver vamos a clararlo todo porque se está liando un poco la cosa.

Primero, los puntos. Los puntos eran necesarios cuando no existían los terminadores explícitos de las instrucciones, es decir los END-IF, END-PERFORM etc. no eran aceptados por el compilador. EL estándar ANS74 trajo estos terminadores explícitos eliminando la necesidad de usar los puntos como terminadores de instrucción.

La desventaja de los puntos es que se ven mal, y siendo Cobol un lenguaje que se basa en palabras inglesas y no en signos y derivados como es el caso de otros lenguajes, los puntos son difíciles de detectar y sobre todo de controlar. Es por ello que cualquier compilador de hoy en día que usa estándares >= ANS74 no obliga a usar los puntos en la PROCEDURE DIVISION dentro del párrafo. El único punto obligatorio es el del fin de párrafo, nada más. Y te recomiendo NO usar los puntos sino poner uno sólo en una línea nueva al final del párrafo (cada párrafo, lógicamente) para que sea bien visible.

Segundo, la pantalla. @Josber se refiere a la SCREEN SECTION, es decir a que tengamos una interfaz definida y la usemos de pantalla. Efectivamente, por herencia son 24x80. Ahora, si simplemente quieres hacer DYSPLAY como System.out.println(), puedes hacer tantos como quieras sin restricción alguna. Solo que dependiendo de la consola/terminal y su buffer, te irá guardando las últimas X líneas, no tiene más.

Tercero, sobre que MF Cobol acepta y no... Todo depende del Dialecto seleccionado. Un dialecto viene a ser un juego de reglas y directivas de compilación para respetar un estándar o comportamiento de un compilador específico. Por defecto, y es lógico, el dialecto en Visual COBOL es el de Micro Focus, que es extremadamente permisivo. Language Features - Dialect

Cuarto, la lógica de lectura de un fichero de manera secuencial es la siguiente:
  1. lees el fichero
  2. dentro del bucle: 1 - muestras campos, 2 - vuelves a leer
  3. si la lectura ha sido correcta, vuelve a iterar, si no, sale del bucle

Ojo. Bajo Windows, la consola no es tan ortodoxa como bajo Linux, bajo Windows incluso diría que está bastante mal hecha, va a su bola. Por tanto, si no usas SCREEN SECTION no esperes gran cosa, porque a veces el comportamiento no es del todo adecuado. En todo caso, lo primero que tienes que hacer es incrementar el buffer de la consola a 900 por ejemplo (estará en 50 por defecto)

Nombre:  VC_CMD_BUFFER.png
Vistas: 84
Tamaño: 45,0 KB

Mira el programa, lo he modificado, lo pruebas y me dices:

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.            
  31.            move zeroes to MAXIMO-REGISTROS.
  32.            open input empleados-archivo.
  33.      
  34.            perform lee-siguiente-registro
  35.            
  36.            perform until fin-del-archivo = "0"
  37.                perform muestra-campos
  38.                perform lee-siguiente-registro
  39.            end-perform
  40.            
  41.            close empleados-archivo
  42.            
  43.            goback
  44.            .
  45.  
  46.        muestra-campos.
  47.            if MAXIMO-REGISTROS = 4
  48.                perform siguiente-pagina
  49.            end-if
  50.            
  51.            display "ID:        " empleados-id
  52.            display "Nombre:    " empleados-nombre
  53.            display "Apellidos: " empleados-apellidos
  54.            display "Edad:      " empleados-edad
  55.            display "Telefono:  " empleados-telefono
  56.            display "Direccion: " empleados-direccion
  57.            
  58.            ADD 1 TO MAXIMO-REGISTROS
  59.            .
  60.  
  61.        lee-siguiente-registro.
  62.            read empleados-archivo next record
  63.                at end
  64.                    move "0" to FIN-DEL-ARCHIVO
  65.                    
  66.                    display "*****FIN DEL FICHERO******"
  67.            end-read
  68.            .
  69.  
  70.        siguiente-pagina.
  71.            display
  72.              "Presiona ENTER para ver la siguiente pagina..."
  73.            accept siguiente no beep.
  74.            display erase
  75.            move zeroes to MAXIMO-REGISTROS
  76.            .
  77.      


Y por último, lo de la paginación, lo que haces normalmente no se hace nunca, lo he dejado para no modificar tu programa mucho. Pero la paginación se usa sólo con SCREEN SECTION. el DISPLAY "simple" sólo se usa para los tests o en tratamientos Batch.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita