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.