Developer's Diary

14 septiembre, 2010

Curso de EasyTrieve IV, Variables II, Arrays (Occurs)

Filed under: Cobol / Jcl / Easytrieve, Programación — jnavero @ 6:54 PM

—- Nos mudamos: http://devthisblog.namocode.es
—————————————————————–
Aquí seguimos con una nueva entrega de este curso, espero que resulte interesante o útil a quien lo esté siguiendo, a mi sin duda, me está sirviendo de repaso. En capítulos anteriores, vimos un poco las sentencias de control (if y Case), sentencias de repetición (do while), vimos variables normales y empaquetadas, operadores e iniciamos el mundo de los cursores en DB2. En esta ocasión ampliaremos los conocimientos de las variables y veremos Vectores.

Definición de variables.

En el capítulo II vimos los tipos de variables y una forma de definir las variables que no siempre es válida. Si no hay definición de ficheros es necesario usar la clausula DEFINE delante seguido del tipo de variable. Esto lo veremos con la explicación de los arrays.

Ampliación de variables. Arrays.

Un array es como un espacio de memoria que reservamos para guardar variables del mismo tipo.

Supongamos una variable de tipo A (Alfanumérica): WS-NOMBRE    W   10 A

Aquí podemos guardar un nombre de 10 caracteres, en un Array podríamos guardar una colección de variables de la siguiente forma:

WS-NOMBRE WS-NOMBRE WS-NOMBRE WS-NOMBRE WS-NOMBRE

En el ejemplo anterior trato de mostrar un array del tipo WS-NOMBRE de 5 posiciones.

Podemos definir un Array de la siguiente forma:

DEFINE   WS-PRUEBA  W  18 A  OCCURS  10 INDEX(I) 

Para ello se utiliza la palabra OCCURS seguido de las posiciones de memoria del array, personalmente, prefiero definir el array con una redefinición de variables. Veamos un ejemplo de su definición.

WTB-AGENDA-A    W    190 A

WS-AGENDA   WTB-AGENDA-A   19  A  OCCURS  10 INDEX(I)

WS-NOMBRE    WS-AGENDA         10 A

WS-TELEFONO  WS-AGENDA   +10    9 N 0

Al principio, el ejemplo puede ser un poco enrevesado, pero aquí podremos un caso normal de un array. Para este ejemplo se ha realizado una redefinición WTB-AGENDA-A de 190 A que es el tamaño total del occurs.

WS-AGENDA es el OCCURS propiamente dicho, 19 A es el tamaño total de los campos que irán posteriormente. Por último, tenemos las variables en sí. WS-NOMBRE y WS-TELEFONO son las variables que contendrán los valores.

En el siguiente ejemplo vemos un pequeño Easy de inicialización del array anterior.

JOB INPUT NULL

I = 1

DO WHILE I LT 11

WS-NOMBRE(I) = ‘PRUEBA’

WS-TELEFONO(I) = 0

I = I + 1

END-DO

STOP

En este ejemplo estamos hacienda una inicialización del array, es decir todo el espacio de memoria reservado a WS-NOMBRE y WS-TELEFONO están tomando un valor. Para referirnos a uno u otro utilizamos el índice I en este caso. Es decir, si tuviésemos los siguientes nombres

Pepe Jose Paco Enrique

Tendríamos que para I = 1, WS-NOMBRE(I) sería igual a Pepe para I = 2, WS-NOMBRE(I) = Jose y así sucesivamente. Lo mismo sucede con los teléfonos.

Arrays Multidimensionales.

Si hemos entendido el caso anterior, este es exactamente lo mismo el ejemplo que hemos visto podemos asociar un teléfono para cada persona. ¿Pero y si una persona puede tener más de un teléfono?. Para esto podríamos declarar un array multidimensional en este caso de dos dimensiones ¿Cómo lo declaramos? Pues exactamente igual que el anterior.

DEFINE WTB-AGENDA-A    W    180 A

DEFINE   WS-AGENDA   WTB-AGENDA-A    18 A  OCCURS  10 INDEX(I)

DEFINE      WS-NOMBRE    WS-AGENDA         10 A

DEFINE      WS-TELEFONO  WS-AGENDA   +10   18 A  OCCURS  2 INDEX(J)

DEFINE         WS-TLF    WS-TELEFONO        9 A

Lo que cambia del caso anterior, es que necesitamos dos bucles para poder recorrer este arrayes decir un bucle que recorre los nombres y dentro de este bucle otro bucle anidado que va recorriendo los teléfonos cada vez. Esto se muestra en el siguiente ejemplo

JOB INPUT NULL

I = 1

J = 1

DO WHILE I LT 10

WS-NOMBRE(I) = ‘PRUEBA’

DO WHILE J LT 2

WS-TELEFONO(I, J) = ‘0’

J = J + 1

END-DO

I = I + 1

J = 1

END-DO

STOP

Lo más importante y que debemos siempre tener en cuenta es el incremento de las variables J e I así como la asignación de las mismas. Si no las incrementamos, podemos causar un bucle infinito.

Esto es todo por hoy, en el proximo ampliaremos los cursores.

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: