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.

Foi útil?

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 DIVISIONissue 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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top