2010-02-09 2 views

ответ

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 для . Сразу же после этого, проверить значение 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

+0

Thnx много, особенно для ссылки. Я абсолютно не знаком с Cobol, поэтому ресурс высоко оценен! – doro

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. 
Смежные вопросы