A instrução WRITE em COBOL grava um registro lógico em um arquivo de saída. Essa ação pode ser feita diretamente ou com controle de posicionamento na página, manipulação de overflow e verificação de chaves em arquivos indexados ou relativos.
📌 Para que serve
-
Gravar registros em arquivos sequenciais, relativos ou indexados.
-
Controlar o posicionamento vertical da saída (ex: impressão em páginas).
-
Verificar se o registro já existe (em arquivos indexados e relativos).
-
Detectar e tratar eventos como fim de página ou chave inválida.
🧾 Sintaxe básica
WRITE nome-do-registro
[FROM identificador-fonte]
[BEFORE | AFTER ADVANCING <n> LINES | LINE | PAGE]
[END-OF-PAGE declaracao]
[INVALID KEY declaracao]
[NOT INVALID KEY declaracao]
END-WRITE.
✅ Exemplo prático
01 SAIDA-RELATORIO.
05 LINHA PIC X(80).
WRITE LINHA
AFTER ADVANCING 1 LINE
END-WRITE.
WRITE REGISTRO-INDEXADO
INVALID KEY DISPLAY "Erro: Registro já existe."
NOT INVALID KEY DISPLAY "Registro gravado com sucesso."
END-WRITE.
⚙️ Como funciona
-
O
WRITEenvia os dados para um arquivo já aberto no modo apropriado (OUTPUT,EXTEND,I-O). -
Com
FROM, o conteúdo de um identificador-fonte é movido para o registro antes da gravação. -
O comando pode incluir controle de página com
ADVANCING, útil em relatórios. -
Pode tratar eventos de fim de página com
END-OF-PAGE. -
Em arquivos indexados ou relativos, pode tratar erros com
INVALID KEY.
🔁 Formatos disponíveis
🔹 Formato 1 — Arquivos sequenciais
WRITE registro
[FROM origem]
[AFTER ADVANCING 1 LINE]
[END-OF-PAGE ...]
END-WRITE.
🔹 Formato 2 — Arquivos indexados/relativos
WRITE registro
[FROM origem]
[INVALID KEY ...]
[NOT INVALID KEY ...]
END-WRITE.
🔹 Formato 3 — Arquivos linha a linha
WRITE registro
AFTER ADVANCING PAGE
END-WRITE.
🧠 Dicas práticas
-
Relatórios: use
ADVANCING PAGEpara pular páginas. -
Arquivos indexados: sempre trate
INVALID KEYpara evitar registros duplicados. -
Arquivos relativos: o campo
RELATIVE KEYdeve estar corretamente posicionado antes doWRITE. -
Se o campo de destino for um
FD, userecord-name— se forSD, oSORTlida com a gravação automaticamente. -
Use
END-WRITEsempre que quiser escopo claro (ex: em IF...WRITE...END-WRITE).
⚠️ Regras importantes
-
O arquivo deve estar aberto no modo correto:
OUTPUT,EXTENDouI-O. -
record-name-1deve estar definido na DATA DIVISION, dentro de uma entrada FD. -
identifier-1(FROM) não pode ocupar a mesma área de memória querecord-name-1. -
O uso de
ADVANCINGou cláusulaLINAGEafeta o controle de posicionamento na página. -
INVALID KEYeNOT INVALID KEYse aplicam apenas a arquivos indexados ou relativos. -
END-OF-PAGEexige que o arquivo tenha a cláusulaLINAGEna definiçãoFD.
🔒 Tratamento de erros
-
INVALID KEY: ocorre se já existir um registro (indexado), ou for fora dos limites (relativo). -
END-OF-PAGE: ocorre se oLINAGE-COUNTERatingir o limite de rodapé da página. -
Se não tratar
INVALID KEYnem usar procedimento de exceção (USE), os resultados são imprevisíveis.
✅ Conclusão
A instrução WRITE é essencial para a gravação de dados em arquivos em COBOL. Ela oferece poderosos recursos de formatação, tratamento de exceções e controle de layout, especialmente útil em programas de geração de relatórios ou em sistemas com controle de registros indexados.