Pregunta

Estoy tratando de encontrar una manera de comprobar si un archivo ya está abierto en COBOL, para que pueda abrirlo si está cerrado o cerrarla si se abre.

Thnx.

¿Fue útil?

Solución

Compruebe el FILE STATUS y actuar en consecuencia.

Pruebe lo siguiente:

Añadir un FILE-STATUS bajo la FILE-CONTROL, por ejemplo:

    FILE-CONTROL.
        SELECT  MYFILE ASSIGN MYDD
                ORGANIZATION SEQUENTIAL
                ACCESS       SEQUENTIAL
                FILE STATUS  MYFILE-STATUS.

Declarar una variable FILE STATUS en WORKING-STORAGE como un valor PIC X(2), por ejemplo:

           01 MYFILE-STATUS   PIC X(2).
              88 MYFILE-ALREADY-OPEN   VALUE '41'.

A continuación, en el PROCEDURE DIVISIONissue un OPEN para su archivo. Inmediatamente después de eso, probar el valor de FILE STATUS como en:

    OPEN MYFILE....
    IF MYFILE-ALRADY-OPEN
       CLOSE MYFILE...
    END-IF
    IF MYFILE-STATUS <> '00'
       perform some sort of general error routine
    END-IF

Los valores de FILE STATUS donde el primer carácter no es un '9', son Los valores estándar de COBOL lo que las pruebas de '41' para detectar un archivo ya abierto debería funcionar en todas las implementaciones COBOL. Tenga cuidado cuando el primer carácter es un '9', estos son los códigos de estado de archivos específicos del fabricante. Echa un vistazo al siguiente enlace para una buena introducción al uso de FILE STATUS COBOL: http://www.simotime.com/vsmfsk01.htm

Otros consejos

Su compilador también puede proporcionar una API externa, como CBL_CHECK_FILE_EXIST que se puede encontrar en Micro Focus COBOL, ACUCOBOL y Fujutsu COBOL.

Por ejemplo, en 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top