Como resolver o file status 71 no GnuCobol
Recentemente codifiquei um programa com o GnuCobol, no Linux, igual a dezenas de outros que já tinha codificado. Nada demais: tinha que ler um arquivo sequencial e gravar outro, com registros selecionados e formatos diferentes. Um SORT com INPUT e OUTPUT PROCEDURE, compila, roda e… nada! Nenhum registro gravado no arquivo de saída. Botei o display no file status depois do release e lá estava ele: file status 71.
Alguém já tinha ouvido falar?
Não me lembro de ter visto esse erro nesses mais de trinta anos. Mas, sabendo que minha memória não é mais a mesma, fui às fontes de costume: Google, StackOverflow, SourceForge… nada. Só aparecia o de sempre: 00, 10, 22, 23, 30, 35, 39, 43, 46… pula pros noventa, fala do low-order digit de cada compilador, e nada de file status 71.
Apelei para o chatGPT, e a resposta foi essa aí, o que obviamente estava longe de ser o caso. Isso mostra que, quando o assunto é Cobol, confiar cegamente em IA ainda é arriscado:

O programa
O programa obviamente não era esse, mas vale para mostrar o erro em questão. Ele apresenta o mesmo file status 71 na hora da gravação do registro.
identification division.
program-id. erro71.
environment division.
input-output section.
file-control.
select arquivo assign to "arquivo.txt"
organization is line sequential
file status is wt-st-arquivo.
data division.
file section.
fd arquivo.
01 registro.
03 campo-1 pic x(010).
03 campo-2 pic s9(005) comp.
working-storage section.
01 wt-st-arquivo pic x(002) value spaces.
procedure division.
open output arquivo
move "abc" to campo-1
move 2017 to campo-2
write registro
display "file status " wt-st-arquivo
close arquivo
stop run.
Provavelmente você já viu onde está o problema: arquivo linear sequencial com campo comp. O que acontece é que o Cobol espera encontrar um caracter newline (x’0A’) no final de cada registro de um arquivo linear sequencial. Se o arquivo contém um campo comp, comp-3, comp-5 ou qualquer outro binário ou compactado, é bem provável que apareça um x’0A’ em algum lugar no “meio” do registro, e isso faz com que o Cobol rejeite a gravação, pois ela não estaria de acordo com o RECORD FORMAT F, implícito na declaração do arquivo.
Solução
Nesse caso, eu simplesmente transformei a organização do arquivo para sequencial (não mais linear sequencial) e o problema foi resolvido. Em outros casos , porém, é possível que se precise manter a organização linear sequencial e, para isso, todos os campos numéricos terão que ser decimais zonados (usage display).
Espero ter te ajudado, caso você esteja passando pelo mesmo problema.
Um grande abraço.