COBOL - Processamento da Tabela



Matrizes em COBOL são conhecidas como tabelas. Uma matriz é uma estrutura de dados linear e é uma coleção de itens de dados individuais de mesmo tipo. Os itens de dados de uma tabela são internamente ordenados.

Tabela Declaração

Tabela é declarada em Data Divisão. Ocorre cláusula é usado para definir uma tabela. Ocorre cláusula indica a repetição do nome de dados definição. Ele pode ser usado apenas com números de nível a partir dos 02 a 49 anos. Não use ocorre cláusula com redefine. Descrição de um tridimensional e bidimensional tabela é a seguinte:

Mesa One-Dimensional

Em uma tabela bidimensional, ocorre cláusula é usada apenas uma vez na declaração. WS-TABLE é o item de grupo que contém tabela. WS-B os nomes da tabela os elementos que ocorrem 10 vezes.

Sintaxe

Sintaxe é a seguinte para definir uma tabela bidimensional:

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

Exemplo

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 executar o programa em COBOL:

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

Mesa Two-Dimensional

Duas dimensões tabela é criada com ambos os elementos de dados sendo tamanho variável. Para referência, vá a sintaxe e, em seguida, tentar analisar o quadro. A primeira matriz(WS-A) pode ocorrer de 1 a 10 vezes e o matriz interior (WS-C) pode ocorrer de 1 a 5 vezes. Para cada entrada do WS-A, não será correspondente 5 entradas do WS-C.

Sintaxe

Seguir é a sintaxe para a definição de uma tabela bidimensional:

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).

Exemplo

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 executar o programa em COBOL:

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Subscript

Tabela elementos individuais podem ser acessados usando subscrito. Subscript valus pode variar de 1 até o número de vezes que o quadro ocorre. Subscript pode ser qualquer número positivo. Não é necessária qualquer declaração de dados divisão. Ela é criada automaticamente com ocorre cláusula.

Exemplo

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 executar o programa em COBOL.

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

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

Index

Tabela os elementos também podem ser acessados usando índice. Um índice é um deslocamento do elemento desde o início do quadro. Um índice é declarada com ocorre com cláusula indexados pela cláusula. O valor do índice pode ser mudado usando instrução SET e EXECUTE diversas opção.

Sintaxe

Sintaxe é a seguinte para definir índice em uma tabela:

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

Exemplo

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 executar o programa em COBOL.

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

ABC
DEF
GHI
JKL
MNO
PQR

Instrução Set

Instrução Set é usado para alterar o valor do índice. Que verbo é utilizado para inicializar, incrementar ou decrementar o valor do índice. Ele é usado com a pesquisa e pesquisa Todos para localizar os elementos no quadro.

Sintaxe

Sintaxe é a seguinte para usar a instrução 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

Exemplo

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 executar o programa em COBOL.

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

ABC
JKL

Pesquisar

Busca linear é um método de pesquisa, que é usado para localizar os elementos dentro da tabela. Ela pode ser executada no classificados, bem como lixo. Ela é usada somente para tabelas Índice declarado pela frase. Ela começa com o valor inicial do índice. Se o elemento procurado não é encontrado, então o índice é incrementado automaticamente pelo 1º e ele continua até o fim da tabela.

Exemplo

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 executar o programa em COBOL.

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

LETTER M FOUND IN TABLE

Pesquisar em todos

Pesquisa binária é um método de pesquisa, que é usado para localizar os elementos dentro da tabela. Tabela deve ser na ordem de classificação para pesquisar todas as opções. O índice não requer a inicialização. A pesquisa binária o quadro é dividido em duas metades, e determina em que metade dos pesquisados elemento está presente. Este processo se repete até que o elemento é encontrado ou o final é alcançado.

Exemplo

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 executar o programa em COBOL:

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

Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:

RECORD FOUND 
93
MNO
Advertisements