Как проверить, открыт ли файл уже в COBOL? - PullRequest
3 голосов
/ 09 февраля 2010

Я пытаюсь найти способ проверить, открыт ли уже файл в COBOL, чтобы я мог открыть его, если он был закрыт, или закрыть его, если он был открыт.

Thnx.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2010

Отметьте 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

1 голос
/ 15 февраля 2010

Ваш компилятор может также предоставить внешний 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.
...