A instrução SET no COBOL é utilizada para atribuir valores a índices, ponteiros ou níveis-88 (condições nomeadas). É uma operação específica para controle de navegação em tabelas, manipulação de ponteiros e flags condicionais.

📌 Para que serve

  • Inicializar ou alterar o valor de um índice (usado com OCCURS e INDEXED BY).

  • Atribuir o endereço de memória de um item a um ponteiro.

  • Definir uma condição de nível 88 como verdadeira (SET condição TO TRUE).

🧾 Sintaxe básica

SET índice TO literal
SET índice1 TO índice2
SET condição TO TRUE
SET ponteiro TO NULL
SET ponteiro TO ADDRESS OF variável
SET ponteiro TO H'200000'

Exemplo prático com índice

01 TABELA-CODIGOS.
   05 CODIGO   PIC X(5) OCCURS 10 TIMES INDEXED BY IND-COD.

SET IND-COD TO 1.

Exemplo prático com ponteiro

01 PTR-REGISTRO USAGE IS POINTER.
01 REGISTRO-CLIENTE.
   05 NOME PIC X(20).

SET PTR-REGISTRO TO ADDRESS OF REGISTRO-CLIENTE.

Exemplo prático com condição (nível 88)

01 STATUS-PEDIDO PIC X(1).
   88 PEDIDO-APROVADO VALUE "A".
   88 PEDIDO-CANCELADO VALUE "C".

SET PEDIDO-APROVADO TO TRUE.

⚙️ Como funciona internamente

Tipo de uso Descrição
Índices Controlam a posição atual em uma tabela OCCURS ... INDEXED BY.
Ponteiros Guardam o endereço de memória de um item, usado com USAGE IS POINTER.
Nível 88 (condição) Marcam uma condição como ativa.

⚠️ Regras importantes

  • SET só pode alterar 1 item por vez.

  • Índices só podem ser usados com tabelas declaradas com INDEXED BY.

  • SET TO TRUE só funciona com níveis 88.

  • Ao usar ADDRESS OF, o item de destino deve estar na LINKAGE SECTION ou ser compatível com ponteiros.

  • SET ponteiro TO NULL limpa o ponteiro.

  • Pode-se usar valor hexadecimal com SET ponteiro TO H'...'.

🧠 Dicas práticas

  • Antes de usar SEARCH em uma tabela, inicialize o índice com SET.

  • Use SET TO TRUE para forçar uma condição sem precisar alterar o valor da variável base.

  • Em programas com alocação dinâmica ou manipulação de memória, SET TO ADDRESS OF é essencial.

  • Evite usar SET em variáveis otimizadas, pois podem ser descartadas pelo compilador.

✅ Conclusão

O comando SET é indispensável para manipulação de tabelas, ponteiros e condições no COBOL. É simples, direto e altamente específico. Dominar o uso de SET melhora a eficiência e clareza em programas que utilizam estruturas indexadas e controle de estados com nível 88.