Cómo comprobar si un archivo está abierto ya en COBOL?
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.
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 DIVISION
issue 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.