Как проверить, открыт ли файл уже в 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.
Другие вопросы по тегам