Tabelas internas e arrays dinâmicos

O COBOL permite a criação de tabelas com tamanhos variáveis, mas isso não significa que elas podem ser adotadas como os arrays dinâmicos disponíveis em outras linguagens.

Enquanto arrays dinâmicos podem ser expandidos automaticamente em tempo de execução, nas tabelas internas do COBOL, mesmo que se use a opção OCCURS DEPENDING ON, o tamanho máximo da tabela é sempre alocado em memória quando o programa é executado.

Conceito de tabela interna

No COBOL, tabela interna é o nome que se dá a um conjunto uniforme de variáveis que se repetem. Elas são criadas na DATA DIVISION com o uso da cláusula OCCURS na declaração de variáveis.

Apesar da palavra “tabela” dar a entender que se trata de uma estrutura bidimensional, o COBOL permite a criação de “tabelas” com uma, duas, três, até sete dimensões. Na prática, porém dificilmente precisamos de uma tabela (ou matriz) com mais de três.

O exemplo abaixo mostra a declaração de uma tabela com uma dimensão para armazer salários mês a mês. Cada salário ficaria armazenado numa das ocorrências da tabela:

01 SALARIOS-MENSAIS.
    03 VALOR-SALARIO PIC S9(009)V9(002) OCCURS 12.

Se quiséssemos fazer referência, por exemplo, ao salário do mês 11, poderíamos usar um subscrito como em VALOR-SALARIO(11).

Também podemos criar uma tabela bidimensional para guardar salários dos últimos 20 anos. A primeira dimensão guardaria os salários de determinado ano e a segunda dimensão guardaria os salários de cada mês:

01 SALARIOS-ULTIMOS-20-ANOS.
    03 SALARIOS-ANUAIS OCCURS 20.
        05 VALOR-SALARIO PIC S9(009)V9(002) OCCURS 12.

Por haver um item elementar (VALOR-SALARIO) que ocorre 12 vezes, dentro de um item de grupo (SALARIOS-ANUAIS) que ocorre 20 vezes, na prática estamos declarando uma tabela com duas dimensões. Para fazer ao referência, por exemplo, ao salário do mês 10 do ano 5, escreveríamos VALOR-SALARIO(5, 10).

O livro COBOL: Do Básico ao Avançado, disponível neste portal, possui um capítulo específico para explicar como funcionam as tabelas internas, falando inclusive de métodos de carga e pesquisa. Você pode ir direto para esse capítulo clicando aqui.

Tabelas internas com tamanho variável

O COBOL permite que se defina tabelas com uma quantidade variável de ocorrências. O exemplo abaixo mostra uma tabela de uma dimensão cujo número de ocorrências podem variar de 1 a 200.

77 QUANTIDADE-SALARIOS  PIC 9(002) VALUE ZEROS.
...
01 SALARIOS.
    03 VALOR-SALARIO    PIC S9(009)V9(009)
        OCCURS 1 TO 200 DEPENDING ON QUANTIDADE-SALARIOS.

Mas ainda que a quantidade possa variar, é preciso fixar um tamanho máximo de ocorrências em tempo de codificação, nesse caso 200, e o programa sempre alocará em memória essa quantidade máxima de ocorrências.

A variável QUANTIDADE-SALARIOS, no exemplo anterior, serviria apenas para delimitar a quantidade de ocorrências efetivamente utilizada, mas não teria nenhum efeito sobre o espaço ocupado em memória. Qualquer tentativa de fazer referência à ocorrência 201 provocaria um erro em tempo de execução.


Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *