COBOL - Proceso de Tabla


Advertisements

Las matrices de COBOL son conocidos como tablas. Un array es una estructura de datos lineal y es una recopilación de los distintos elementos de datos del mismo tipo. Los datos de una tabla se clasifican internamente.

Declaración mesa

Tabla de Datos se declara en División. se produceCláusula se utiliza para definir una tabla. Cláusula se indica la repetición de datos definición de nombre. Sólo se puede utilizar con números de nivel a partir de 02 a 49. No se produce el uso con cláusula redefine. Descripción de un y bidimensional tabla es el siguiente:

One-Dimensional Tabla

En una tabla multidimensional, se produce cláusula sólo se utiliza una vez en la declaración. WS-TABLA es el elemento de grupo que contiene tabla. WS-B nombres de los elementos de la tabla que se producen 10 veces.

Sintaxis

Siguiente es la sintaxis para definir una tabla multidimensional:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC A(10) VALUE 'TUTORIALS' OCCURS 5 TIMES.     

PROCEDURE DIVISION.
   DISPLAY "ONE-D TABLE : "WS-TABLE.
STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

Two-Dimensional Tabla

Una tabla bidimensional se crea con los elementos de datos se longitud variable. Para referencia, vaya a través de la sintaxis y, a continuación, intentar analizar la tabla. La primera matriz(WS-A) puede ocurrir a partir de 1 a 10 veces y la matriz interna(WS-C) puede ocurrir de 1 a 5 veces. Para cada una de las entradas de WS-A, habrá 5 entradas correspondientes de WS-C.

Sintaxis

Siguiente es la sintaxis para la definición de una tabla de dos dimensiones:

01 WS-TABLE.
   05 WS-A OCCURS 10 TIMES.
      10 WS-B PIC A(10).
      10 WS-C OCCURS 5 TIMES.
         15 WS-D PIC X(6).

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 2 TIMES.
         10 WS-B PIC A(10) VALUE ' TUTORIALS'.
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(6) VALUE ' POINT'.

PROCEDURE DIVISION.
   DISPLAY "TWO-D TABLE : "WS-TABLE.

STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Subscript

Tabla elementos individuales se accede mediante subíndice. Subíndice valor puede oscilar entre 1 y el número de veces que el cuadro se produce. Subíndice puede ser cualquier número positivo. No se requiere ninguna declaración de datos división. Se crea automáticamente con cláusula se produce.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   DISPLAY 'WS-TABLE  : ' WS-TABLE.
   DISPLAY 'WS-A(1)   : ' WS-A(1).
   DISPLAY 'WS-C(1,1) : ' WS-C(1,1).
   DISPLAY 'WS-C(1,2) : ' WS-C(1,2).
   DISPLAY 'WS-A(2)   : ' WS-A(2).
   DISPLAY 'WS-C(2,1) : ' WS-C(2,1).
   DISPLAY 'WS-C(2,2) : ' WS-C(2,2).
   DISPLAY 'WS-A(3)   : ' WS-A(3).
   DISPLAY 'WS-C(3,1) : ' WS-C(3,1).
   DISPLAY 'WS-C(3,2) : ' WS-C(3,2).
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

WS-TABLE  : 12ABCDEF34GHIJKL56MNOPQR
WS-A(1)   : 12ABCDEF
WS-C(1,1) : ABC
WS-C(1,2) : DEF
WS-A(2)   : 34GHIJKL
WS-C(2,1) : GHI
WS-C(2,2) : JKL
WS-A(3)   : 56MNOPQR
WS-C(3,1) : MNO
WS-C(3,2) : PQR

Índice

Elementos de la tabla también se puede acceder mediante índice. Un índice es un desplazamiento del elemento desde el inicio de la tabla. Un índice se declara con cláusula se produce mediante INDEXADO POR cláusula. El valor del índice se puede cambiar mediante instrucción SET y REALIZAR diferentes opción.

Sintaxis

Es la siguiente sintaxis para definir Índice en una tabla:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES INDEXED BY I.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3 
   STOP RUN.
   
   A-PARA.
   PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
   
   C-PARA.
   DISPLAY WS-C(I,J).

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

ABC
DEF
GHI
JKL
MNO
PQR

Instrucción Set

Instrucción Set se usa para cambiar el valor del índice. Verbo Set se usa para inicializar, aumentar o disminuir el valor del índice. Se utiliza en las tareas de búsqueda y búsqueda para localizar todos los elementos en la tabla.

Sintaxis

Siguiente es la sintaxis para utilizar una instrucción Set:

SET I J TO positive-number
SET I TO J
SET I TO 5
SET I J UP BY 1
SET J DOWN BY 5

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   SET I J TO 1.
   DISPLAY WS-C(I,J).
   SET I J UP BY 1.
   DISPLAY WS-C(I,J).
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

ABC
JKL

Buscar

Búsqueda lineal es un método de búsqueda, que se utiliza para buscar elementos dentro de la tabla. Se puede realizar en clasificados, así como sin clasificar. Sólo se utiliza para las tablas de Índice frase. Se inicia con el valor inicial del índice. Si el elemento buscado no se encuentra, el índice se incrementa de forma automática en 1 y continúa hasta el final de la tabla.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC X(1) OCCURS 18 TIMES INDEXED BY I.
   01 WS-SRCH PIC A(1) VALUE 'M'.

PROCEDURE DIVISION.
   MOVE 'ABCDEFGHIJKLMNOPQR' TO WS-TABLE.
   SET I TO 1.
   SEARCH WS-A
     AT END DISPLAY 'M NOT FOUND IN TABLE'
     WHEN WS-A(I)=WS-SRCH
     DISPLAY 'LETTER M FOUND IN TABLE'
   END-SEARCH.  

STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

LETTER M FOUND IN TABLE

Buscar todos

Buscar en todos es un método de búsqueda binaria, que se utiliza para buscar elementos dentro de la tabla. Tabla debe ser de forma ordenada para la búsqueda. El índice no requieren inicialización. En búsqueda binaria el cuadro está dividido en dos mitades y determina en la que la mitad de los elemento buscado está presente. Este proceso se repite hasta que el elemento se encuentra o se llega al final.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-RECORD OCCURS 10 TIMES ASCENDING KEY IS WS-NUM INDEXED BY I.
      10 WS-NUM PIC 9(2).
      10 WS-NAME PIC A(3).

PROCEDURE DIVISION.
   MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO WS-TABLE.
   SEARCH ALL WS-RECORD
     AT END DISPLAY 'RECORD NOT FOUND'
     WHEN WS-NUM(I)=93
     DISPLAY 'RECORD FOUND '
     DISPLAY WS-NUM(I)
     DISPLAY WS-NAME(I)

END-SEARCH. 

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado siguiente:

RECORD FOUND 
93
MNO
Advertisements