我试图找出一种方法来检查文件是否已经在COBOL中打开,这样我可以打开它,如果它已关闭,或者如果它被打开则关闭它。
日Thnx。
答案 0 :(得分:5)
检查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'的FILE STATUS
的值是
COBOL标准值因此测试'41'以检测已打开的文件
应该适用于所有COBOL实现。当第一个字符是'9'时要小心,
这些是供应商特定的文件状态代码。请查看以下链接
关于使用COBOL的一个很好的介绍{{1}}:http://www.simotime.com/vsmfsk01.htm
答案 1 :(得分:1)
您的编译器还可能提供外部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.