Как проверить, открыт ли файл уже в COBOL?
Я пытаюсь найти способ проверить, открыт ли уже файл в COBOL, чтобы я мог открыть его, если он был закрыт, или закрыть его, если он был открыт.
Thnx.
2 ответа
Проверить FILE STATUS
и действовать соответственно.
Попробуйте следующее:
Добавить FILE-STATUS
под FILE-CONTROL
, например:
FILE-CONTROL.
SELECT MYFILE ASSIGN MYDD
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS MYFILE-STATUS.
Объявить FILE STATUS
переменная в WORKING-STORAGE
как PIC X(2)
значение, например:
01 MYFILE-STATUS PIC X(2).
88 MYFILE-ALREADY-OPEN VALUE '41'.
Тогда в PROCEDURE DIVISION
выдать OPEN
для вашего файла. Сразу после этого проверьте значение FILE STATUS
как в:
OPEN MYFILE....
IF MYFILE-ALRADY-OPEN
CLOSE MYFILE...
END-IF
IF MYFILE-STATUS <> '00'
perform some sort of general error routine
END-IF
Значения FILE STATUS
где первый символ не равен "9", это стандартные значения COBOL, поэтому проверка на "41" для обнаружения уже открытого файла должна работать на всех реализациях COBOL. Остерегайтесь, когда первый символ - "9", это коды состояния файла, специфичные для поставщика. Проверьте следующую ссылку для хорошего введения в использование COBOL FILE STATUS
: http://www.simotime.com/vsmfsk01.htm
Ваш компилятор может также предоставить внешний API, такой как CBL_CHECK_FILE_EXIST, который можно найти в Micro Focus COBOL, AcuCOBOL и Fujutsu COBOL.
Например, на 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.