Cobol. Tablas.
Una tabla es un conjunto campos contiguos, cuya longitud y tamaño deben ser iguales,
unidos todos bajo un mismo nombre, de manera que accedemos a ellos de forma individual
a través de uno o varios índices. Vamos a hacer un ejemplo para verlo mas claro:
Vamos a imaginar un cine, en las que pueden entrar un máximo de 1000 personas por día.
Lo que queremos es que no cuente el número de personas que han ido al cine cada día
de la semana.
Con lo que sabemos hasta ahora debemos crear 7 variables, una para cada día de
la semana:
...
77 lunes pic 9(04).
77 martes pic 9(04).
77 miercoles pic 9(04).
77 jueves pic 9(04).
77 viernes pic 9(04).
77 sabado pic 9(04).
77 domingo pic 9(04).
Ahora bastaría con ir almacenando las visitas en cada día de la semana. Ahora bien, con
las tablas nos ahorraríamos estas 7 definiciones y lo almacenaríamos en una sola variable,
de forma que quedaría así:
...
01 cine.
02 visitas pic 9(04) occurs 7 times.
Ahora sólo nos ha hecho falta declarar una sola variable. Si quisiéramos cargar o mover
datos a la tabla deberíamos indicar un índice:
...
move 121 to visitas(1)
move 82 to visitas(2)
move 42 to visitas(3)
move 61 to visitas(4)
move 425 to visitas(5)
move 247 to visitas(6)
move 879 to visitas(7)
Si nos fijamos bien, todas las variables, son de la misma longitud y del mismo tipo de datos,
no puede ser de otra forma si queremos usar una tabla. Es un pequeño requisito a tener
en cuenta.
Redefines. Este cláusula se utiliza para rellenar la tabla antes de empezar el programa,
es decir, desde la Working. Vamos a ver un ejemplo:
01 semanas-textos.
02 texto pic x(21) value "lunmarmiejueviesabdom".
01 semanas redefines semanas-textos.
02 dias pic x(03) occurs 7 times.
De esta forma lo que hacemos con la cláusula Redefines, es cargar la tabla "semanas"
con los valores de la variable "semanas-textos" desde el principio del programa.
En la memoria del ordenador este tipo de tablas quedaría representada de la siguiente
manera.
Cine
Esto son tablas unidimensionales, pero también lo podemos hacer de varias dimensiones
llamadas matrices:
En el ejemplo del cine, vamos almacenar el género, así contaremos también si es
hombre o mujer:
01 cine.
02 genero occurs 2 times.
03 visitas pic 9(04) occurs 7 times.
Ahora para cargar o mover datos se necesitan dos índices, uno para la fila y otro para la
columna, de manera que quedaría así:
move 125 to visitas(1,1) move 125 to visitas(2,1)
move 125 to visitas(1,2) move 125 to visitas(2,2)
move 125 to visitas(1,3) move 125 to visitas(2,3)
move 125 to visitas(1,4) move 125 to visitas(2,4)
move 125 to visitas(1,5) move 125 to visitas(2,5)
move 125 to visitas(1,6) move 125 to visitas(2,6)
move 125 to visitas(1,7) move 125 to visitas(2,7)
Veamos como se representa en la memoria:
Cine
Las tablas se pueden complicar como se quiera, incluso meter una tabla dentro de otra,
ponerlas en ficheros y demás. Buscando en internet vi un ejemplo que me pareció bastante
bueno para ver como son las que tienen varias dimensiones:
01 tabla.
02 trabajadores occurs 100 times.
03 nombre pic x(30).
03 nif pic x(10).
03 salario occurs 12 times.
05 bruto pic s9(08).
05 neto pic s9(08).
05 gastos occurs 10 times.
07 gasto pic s9(08).
Vamos a explicar todo este embrollo:
- Tenemos una tabla de trabajadores de 100 elementos, compuestos cada uno de ellos por el
nombre y el nif.
- Al mismo tiempo tenemos 12 salarios, uno por cada mes, que se compone de un sueldo bruto
y un sueldo neto, es decir, tenemos 12 sueldos netos y 12 brutos por trabajador.
- Y para finalizar cada trabajador tiene 10 tipos de gastos diferentes.
Vamos a ver como nos podemos referir a cada elemento:
- Para saber el nombre del trabajador número 50: display nombre (50).
- Para saber el Nif del trabajador 50: display nif(50).
- Para saber el bruto de Mayo del trabajador 50: display bruto(50, 5).
- Para saber el neto del trabajador 50 del mes de Noviembre: display neto(50,11).
- Para saber el gasto número 3 del mes de Febrero del trabajador 50: display gasto(50,2,3).
Ahora las tablas podemos empezar a usarlas con lo que sabemos hasta ahora, como por
ejemplo, los bucles para buscar elementos, condiciones para compararlos...etc...etc...etc.
unidos todos bajo un mismo nombre, de manera que accedemos a ellos de forma individual
a través de uno o varios índices. Vamos a hacer un ejemplo para verlo mas claro:
Vamos a imaginar un cine, en las que pueden entrar un máximo de 1000 personas por día.
Lo que queremos es que no cuente el número de personas que han ido al cine cada día
de la semana.
Con lo que sabemos hasta ahora debemos crear 7 variables, una para cada día de
la semana:
...
77 lunes pic 9(04).
77 martes pic 9(04).
77 miercoles pic 9(04).
77 jueves pic 9(04).
77 viernes pic 9(04).
77 sabado pic 9(04).
77 domingo pic 9(04).
Ahora bastaría con ir almacenando las visitas en cada día de la semana. Ahora bien, con
las tablas nos ahorraríamos estas 7 definiciones y lo almacenaríamos en una sola variable,
de forma que quedaría así:
...
01 cine.
02 visitas pic 9(04) occurs 7 times.
Ahora sólo nos ha hecho falta declarar una sola variable. Si quisiéramos cargar o mover
datos a la tabla deberíamos indicar un índice:
...
move 121 to visitas(1)
move 82 to visitas(2)
move 42 to visitas(3)
move 61 to visitas(4)
move 425 to visitas(5)
move 247 to visitas(6)
move 879 to visitas(7)
Si nos fijamos bien, todas las variables, son de la misma longitud y del mismo tipo de datos,
no puede ser de otra forma si queremos usar una tabla. Es un pequeño requisito a tener
en cuenta.
Redefines. Este cláusula se utiliza para rellenar la tabla antes de empezar el programa,
es decir, desde la Working. Vamos a ver un ejemplo:
01 semanas-textos.
02 texto pic x(21) value "lunmarmiejueviesabdom".
01 semanas redefines semanas-textos.
02 dias pic x(03) occurs 7 times.
De esta forma lo que hacemos con la cláusula Redefines, es cargar la tabla "semanas"
con los valores de la variable "semanas-textos" desde el principio del programa.
En la memoria del ordenador este tipo de tablas quedaría representada de la siguiente
manera.
Cine
Visitas(1) | Visitas(2) | Visitas(3) | Visitas(4) | Visitas(5) | Visitas(6) | Visitas(7) |
Esto son tablas unidimensionales, pero también lo podemos hacer de varias dimensiones
llamadas matrices:
En el ejemplo del cine, vamos almacenar el género, así contaremos también si es
hombre o mujer:
01 cine.
02 genero occurs 2 times.
03 visitas pic 9(04) occurs 7 times.
Ahora para cargar o mover datos se necesitan dos índices, uno para la fila y otro para la
columna, de manera que quedaría así:
move 125 to visitas(1,1) move 125 to visitas(2,1)
move 125 to visitas(1,2) move 125 to visitas(2,2)
move 125 to visitas(1,3) move 125 to visitas(2,3)
move 125 to visitas(1,4) move 125 to visitas(2,4)
move 125 to visitas(1,5) move 125 to visitas(2,5)
move 125 to visitas(1,6) move 125 to visitas(2,6)
move 125 to visitas(1,7) move 125 to visitas(2,7)
Veamos como se representa en la memoria:
Cine
Visitas(1,1) | Visitas(1,2) | Visitas(1,3) | Visitas(1,4) | Visitas(1,5) | Visitas(1,6) | Visitas(1,7) |
Visitas(2,1) | Visitas(2,2) | Visitas(2,3) | Visitas(2,4) | Visitas(2,5) | Visitas(2,6) | Visitas(2,7) |
Las tablas se pueden complicar como se quiera, incluso meter una tabla dentro de otra,
ponerlas en ficheros y demás. Buscando en internet vi un ejemplo que me pareció bastante
bueno para ver como son las que tienen varias dimensiones:
01 tabla.
02 trabajadores occurs 100 times.
03 nombre pic x(30).
03 nif pic x(10).
03 salario occurs 12 times.
05 bruto pic s9(08).
05 neto pic s9(08).
05 gastos occurs 10 times.
07 gasto pic s9(08).
Vamos a explicar todo este embrollo:
- Tenemos una tabla de trabajadores de 100 elementos, compuestos cada uno de ellos por el
nombre y el nif.
- Al mismo tiempo tenemos 12 salarios, uno por cada mes, que se compone de un sueldo bruto
y un sueldo neto, es decir, tenemos 12 sueldos netos y 12 brutos por trabajador.
- Y para finalizar cada trabajador tiene 10 tipos de gastos diferentes.
Vamos a ver como nos podemos referir a cada elemento:
- Para saber el nombre del trabajador número 50: display nombre (50).
- Para saber el Nif del trabajador 50: display nif(50).
- Para saber el bruto de Mayo del trabajador 50: display bruto(50, 5).
- Para saber el neto del trabajador 50 del mes de Noviembre: display neto(50,11).
- Para saber el gasto número 3 del mes de Febrero del trabajador 50: display gasto(50,2,3).
Ahora las tablas podemos empezar a usarlas con lo que sabemos hasta ahora, como por
ejemplo, los bucles para buscar elementos, condiciones para compararlos...etc...etc...etc.
el ejemplo esta muy bueno pero con una muestra gráfica quedaría mejor entendido
ResponderBorrar