Como verificar se um arquivo já está aberto em COBOL?
Pergunta
Eu estou tentando descobrir uma maneira de verificar se um arquivo já está aberto em COBOL, para que eu possa abri-lo se for fechado ou fechá-lo se ele estiver aberto.
Thnx.
Solução
Verifique a FILE STATUS
e agir em conformidade.
Tente o seguinte:
Adicionar um FILE-STATUS
sob a FILE-CONTROL
, por exemplo:
FILE-CONTROL.
SELECT MYFILE ASSIGN MYDD
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS MYFILE-STATUS.
Declare uma variável FILE STATUS
em WORKING-STORAGE
como um valor PIC X(2)
, por exemplo:
01 MYFILE-STATUS PIC X(2).
88 MYFILE-ALREADY-OPEN VALUE '41'.
Em seguida, no PROCEDURE DIVISION
issue um OPEN
para o seu
Arquivo. Imediatamente após isso, testar o valor de FILE STATUS
como em:
OPEN MYFILE....
IF MYFILE-ALRADY-OPEN
CLOSE MYFILE...
END-IF
IF MYFILE-STATUS <> '00'
perform some sort of general error routine
END-IF
Os valores de FILE STATUS
onde o primeiro caractere não é um '9', são
valores padrão COBOL assim testando para '41' para detectar um arquivo já está aberto
deve funcionar em todas as implementações COBOL. Cuidado quando o primeiro caractere é um '9',
estes são fornecedores códigos de status de arquivo específico. Confira no link a seguir para
uma boa introdução ao uso FILE STATUS
COBOL: http://www.simotime.com/vsmfsk01.htm
Outras dicas
O compilador também pode fornecer uma API externa, como CBL_CHECK_FILE_EXIST que pode ser encontrado na Micro Focus COBOL, ACUCOBOL e Fujutsu COBOL.
Por exemplo, na Micro Focus COBOL:
copy "cblproto.cpy".
program-id. MYMAIN.
working-storage section.
01 .
05 file-details cblt-fileexist-buf.
procedure division.
call 'CBL_CHECK_FILE_EXIST' using 'mymain.cbl '
file-details
if return-code not = 0
display "File mymain.cbl does not exist (or error)"
else
display "File mymain.cbl size is " cblt-fe-filesize
of file-details
end-if
end program MYMAIN.