Come verificare se un file è aperto già in COBOL?
Domanda
Sto cercando di trovare un modo per verificare se un file è già aperto in COBOL, in modo che possa aprirlo se è chiusa o chiuderlo se è aperto.
Thnx.
Soluzione
Controllare il FILE STATUS
e agire di conseguenza.
Provare quanto segue:
Aggiungi un FILE-STATUS
sotto il FILE-CONTROL
, ad esempio:
FILE-CONTROL.
SELECT MYFILE ASSIGN MYDD
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS MYFILE-STATUS.
Dichiarare una variabile FILE STATUS
in WORKING-STORAGE
come valore PIC X(2)
, ad esempio:
01 MYFILE-STATUS PIC X(2).
88 MYFILE-ALREADY-OPEN VALUE '41'.
Poi nel PROCEDURE DIVISION
issue un OPEN
per la vostra
file. Immediatamente dopo che, verificare il valore di FILE STATUS
come in:
OPEN MYFILE....
IF MYFILE-ALRADY-OPEN
CLOSE MYFILE...
END-IF
IF MYFILE-STATUS <> '00'
perform some sort of general error routine
END-IF
I valori di FILE STATUS
in cui il primo carattere non è un '9', sono
valori standard di COBOL in modo test per '41' per rilevare un file già aperto
dovrebbe funzionare su tutte le implementazioni COBOL. Attenzione, quando il primo carattere è un '9',
questi sono vendor codici di stato di file specifici. Scopri il seguente link per
una buona introduzione all'uso FILE STATUS
COBOL: http://www.simotime.com/vsmfsk01.htm
Altri suggerimenti
Il compilatore può anche fornire un API esterna, come ad esempio CBL_CHECK_FILE_EXIST che si trova sulla Micro Focus COBOL, ACUCOBOL e Fujutsu COBOL.
Per esempio, su 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.