Domanda

Sto cercando di trovare un modo per verificare se un file è già aperto in COBOL, in modo che possa aprirlo se è chiusa o chiuderlo se è aperto.

Thnx.

È stato utile?

Soluzione

Controllare il FILE STATUS e agire di conseguenza.

Provare quanto segue:

Aggiungi un FILE-STATUS sotto il FILE-CONTROL, ad esempio:

    FILE-CONTROL.
        SELECT  MYFILE ASSIGN MYDD
                ORGANIZATION SEQUENTIAL
                ACCESS       SEQUENTIAL
                FILE STATUS  MYFILE-STATUS.

Dichiarare una variabile FILE STATUS in WORKING-STORAGE come valore PIC X(2), ad esempio:

           01 MYFILE-STATUS   PIC X(2).
              88 MYFILE-ALREADY-OPEN   VALUE '41'.

Poi nel PROCEDURE DIVISIONissue un OPEN per la vostra file. Immediatamente dopo che, verificare il valore di FILE STATUS come in:

    OPEN MYFILE....
    IF MYFILE-ALRADY-OPEN
       CLOSE MYFILE...
    END-IF
    IF MYFILE-STATUS <> '00'
       perform some sort of general error routine
    END-IF

I valori di FILE STATUS in cui il primo carattere non è un '9', sono valori standard di COBOL in modo test per '41' per rilevare un file già aperto dovrebbe funzionare su tutte le implementazioni COBOL. Attenzione, quando il primo carattere è un '9', questi sono vendor codici di stato di file specifici. Scopri il seguente link per una buona introduzione all'uso FILE STATUS COBOL: http://www.simotime.com/vsmfsk01.htm

Altri suggerimenti

Il compilatore può anche fornire un API esterna, come ad esempio CBL_CHECK_FILE_EXIST che si trova sulla Micro Focus COBOL, ACUCOBOL e Fujutsu COBOL.

Per esempio, su 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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top