Iniciar Sesión

Ver la Versión Completa : [Duda] Leer en forma horizontal


dariodr
17 de marzo de 2023, 11:27
Hola amigos coboleros, otra vez molestando por aca.
Tengo este codigo para leer archivos secuenciales, la pregunta es:
Como hago para que los datos leidos se muestren en forma horizontal.
Ejm:
Nombre del empleado ID del empleado Cantidad de casa vendidas
Pedro Perez 1 3
Juan Lopez 2 2

identification division.
program-id. venta-casa.
*
environment division.
input-output section.
file-control.
select empleados assign to "empleados.txt".
*
data division.
file section.
fd empleados.
01 reg-empleados.
03 nombre-empleado pic x(20).
03 idempleado pic 999.
03 casas-vendidas pic 99.
working-storage section.
01 fin-archivo pic x value 'n'.
*
procedure division.
programa-principal.
perform abrir-archivo.
perform proceso.
perform cerrar-archivo.
perform fin-programa.
*
abrir-archivo.
open input empleados.
*
cerrar-archivo.
close empleados.
*
proceso.
perform lee-datos until fin-archivo = 's'.
*
lee-datos.
read empleados
at end move 's' to fin-archivo
not at end
perform muestra-datos
end-read.
*
fin-programa.
stop run.
*
muestra-datos.
display "Nombre de empleado: " nombre-empleado.
display "ID del empleado: " idempleado.
display "Cantidad de casas vendidas: " casas-vendidas.
display " ".

Kuk
17 de marzo de 2023, 11:36
@dariodr,


muestra-datos.
display "Nombre de empleado: " nombre-empleado " " NO ADVANCING
display "ID del empleado: " idempleado " " NO ADVANCING
display "Cantidad de casas vendidas: " casas-vendidas
display " ".

JCantero
17 de marzo de 2023, 13:10
@dariodr, tambien lo puedes hacer así.....


display "Nombre de empleado: " nombre-empleado
" ID del empleado: " idempleado
" Cantidad de casas vendidas: " casas-vendidas.

dariodr
18 de marzo de 2023, 02:36
Quiero algo un poco mas ordenado, con cabecera y que los datos esten tabulados. Se puede.
Salu2.

JCantero
18 de marzo de 2023, 20:17
Haz un display de la cabecera con el formato deseado y despues vas displayando la información.

Josber
19 de marzo de 2023, 12:57
@dariodr,

A ver si con esto te vale y, sobre todo, te aclaras y lo entiendes


identification division.
program-id. venta-casa.
*
environment division.
input-output section.
file-control.
select empleados assign to "empleados.txt".
*
data division.
file section.
fd empleados.
01 reg-empleados.
03 nombre-empleado pic x(20).
03 idempleado pic 999.
03 casas-vendidas pic 99.
working-storage section.
01 fin-archivo pic x value 'n'.
*
01 L PIC 99 VALUE 0.
01 CAB.
03 PIC XX VALUE SPACES.
03 PIC X(20) VALUE "Nombre".
03 PIC X VALUE SPACES.
03 PIC X(03) VALUE "Id.".
03 PIC X VALUE SPACES.
03 PIC X(05) VALUE "Casas".
01 CUERPO.
03 PIC XX VALUE SPACES.
03 WNOM PIC X(20).
03 PIC X VALUE SPACES.
03 WID PIC 999 USAGE IS DISPLAY.
03 PIC X VALUE SPACES.
03 WCAS PIC 99 USAGE IS DISPLAY.
01 TECLA PIC X VALUE SPACES.
*
procedure division.
programa-principal.
perform abrir-archivo.
perform proceso.
perform cerrar-archivo.
perform fin-programa.
*
abrir-archivo.
open input empleados.
*
cerrar-archivo.
close empleados.
*
proceso.
INITIALIZE L CUERPO TECLA fin-archivo.
PERFORM IMP-CABECERA.
perform lee-datos until fin-archivo = 's'.
*
lee-datos.
read empleados NEXT RECORD
at end
move 's' to fin-archivo
not at end
perform muestra-datos
end-read.
*
fin-programa.
stop run.
*
muestra-datos.
MOVE nombre-empleado TO WNOM.
MOVE idempleado TO WID.
MOVE casas-vendidas TO WCAS.
DISPLAY CUERPO.

* display "Nombre de empleado: " nombre-empleado.
* display "ID del empleado: " idempleado.
* display "Cantidad de casas vendidas: " casas-vendidas.

display " ".

INITIALIZE CUERPO.
ADD 1 TO L.
IF L = 0
OR L > 23
DISPLAY "Pulse una tecla para continuar (F para terminar) ..."
WITH NO ADVANCING
ACCEPT TECLA
IF TECLA = "F" OR TECLA = "f"
MOVE "s" TO fin-archivo
ELSE
INITIALIZE fin-archivo TECLA CUERPO
PERFORM IMP-CABECERA
END-IF
END-IF.
*
IMP-CABECERA.
DISPLAY " " ERASE.
DISPLAY CAB.
MOVE 1 TO L.


Lo que hay escrito en mayúsculas, es lo que he añadido yo, solo tengo una duda y es que ...

DISPLAY " " ERASE

igual no te funciona en ese compilador, esa instrucción, lo que hace es borrar la pantalla, pero no es "compatible" con todos los lenguajes COBOL, cada uno tiene su manera :tribu:, igual que no sé cuál es el equivalente a LINE y POSITION en el COBOL que tu usas, si lo supiera, podría hacerse más rápido y claro.
No lo he probado porque, obviamente, no tengo instalado ese compilador, pero supongo que funcionará sin errores, de lo contrario, dínoslo para solucionarlo. :) :)

Un salu2.-

dariodr
20 de marzo de 2023, 02:14
Funciono, ahora lo arreglo a mis necesidades