A instrução REWRITE no COBOL serve para substituir logicamente um registro existente em arquivos de acesso direto (indexado ou relativo). É usada após um READ bem-sucedido e só funciona com arquivos abertos no modo I-O.

📌 Para que serve

  • Atualizar um registro existente com novos dados.

  • Substituir um registro após leitura sem alterar a posição no arquivo.

  • Manter a lógica do arquivo sem recriar registros manualmente.

🧾 Sintaxe básica

REWRITE nome-do-registro.
REWRITE nome-do-registro FROM identificador.

Com tratamento de erro:

REWRITE nome-do-registro
   INVALID KEY
      procedimento-em-caso-de-erro
   NOT INVALID KEY
      procedimento-quando-ok
END-REWRITE.

✅ Exemplo prático

READ ARQ-CLIENTE
   AT END
      DISPLAY "Cliente não encontrado"
   NOT AT END
      MOVE "SUSPENSO" TO STATUS-CLIENTE
      REWRITE REG-CLIENTE
         INVALID KEY
            DISPLAY "Erro ao atualizar"
      END-REWRITE
END-READ.

⚙️ Definições e comportamentos

Elemento Definição
record-name-1 Nome do registro lido e que será substituído.
FROM identifier Move os dados do identificador para o registro antes de reescrevê-lo.
INVALID KEY Tratamento caso a substituição falhe.
NOT INVALID KEY Código executado quando a substituição for bem-sucedida.
END-REWRITE Delimita escopo da instrução (recomendado com lógica condicional).

📌 Requisitos e restrições

  • O arquivo deve estar aberto com I-O.

  • Só pode ser usada após um READ bem-sucedido.

  • Para arquivos sequenciais, a quantidade de bytes do registro deve ser idêntica.

  • Para arquivos indexados ou relativos, os tamanhos podem variar.

🧠 Dicas práticas

  • Não tente usar REWRITE com arquivos abertos em INPUT ou EXTEND.

  • A variável que contém os novos dados (se usar FROM) continua intacta após a execução.

  • Se o modo de acesso for aleatório, verifique se a RECORD KEY ou RELATIVE KEY está correta antes do REWRITE.

  • Use FILE STATUS para capturar códigos de erro se preferir não usar INVALID KEY.

✅ Conclusão

A instrução REWRITE é essencial para atualizações diretas de registros em arquivos COBOL. Usando corretamente, permite modificar registros com segurança, mantendo a integridade da organização do arquivo e permitindo controle total do processo de entrada e saída em sistemas mainframe ou ambientes legados.