我正在尝试找到一种方法来检查文件是否已在 COBOL 中打开,以便在关闭时打开它,或者在打开时关闭它。
谢谢。
检查FILE STATUS
并采取相应措施。
尝试以下操作:
FILE-STATUS
在下添加一个FILE-CONTROL
,例如:
FILE-CONTROL.
SELECT MYFILE ASSIGN MYDD
ORGANIZATION SEQUENTIAL
ACCESS SEQUENTIAL
FILE STATUS MYFILE-STATUS.
FILE STATUS
将变量 in声明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.