COBOL - Comando OPEN - www.cadcobol.com.br
Esta instrução acessa os arquivos em um programa e indica quais são os de entrada e saída. Permitir o processamento de arquivos. Realiza também verificações e ou gravação de labels e outras operações de entrada/saída.
As frases INPUT, OUTPUT, I-O e EXTEND especificam o modo a ser usado para abrir o arquivo. Pelo menos uma das frases INPUT, OUTPUT, I-O ou EXTEND deve ser especificada com a palavra-chave OPEN. As frases INPUT, OUTPUT, I-O e EXTEND podem aparecer em qualquer ordem.
Não especifique OUTPUT para arquivos que:
Se a frase OUTPUT for especificada para um arquivo que já contém registros, o conjunto de dados deverá ser definido como reutilizável e não poderá ter um índice alternativo. Os registros no arquivo serão substituídos pelos novos dados e qualquer cláusula ALTERNATE RECORD KEY na instrução SELECT será ignorada.
A frase EXTEND é permitida para arquivos de acesso seqüencial somente se os novos dados forem gravados em seqüência crescente. A frase EXTEND é permitida para arquivos que especificam a cláusula LINAGE.
Para arquivos QSAM, não especifique a frase EXTEND para um rolo de arquivos múltiplos.
Se você deseja anexar a um arquivo, mas não tem certeza se o arquivo existe, use a cláusula SELECT OPTIONAL antes de abrir o arquivo no modo EXTEND. O arquivo será criado ou anexado, dependendo da existência do arquivo.
Se o conceito de bobinas não tiver significado para o meio de armazenamento (por exemplo, um dispositivo de acesso direto), as frases REVERSED e NO REWIND não se aplicarão.
Para obter informações sobre tamanhos de arquivo, consulte Compiler limits
Quando OPEN REVERSED é especificado, o formato do registro deve ser corrigido.
Se a cláusula PASSWORD for especificada na entrada de controle de arquivo, o item de dados da senha deverá conter uma senha válida antes da execução da instrução OPEN. Se uma senha válida não estiver presente, a execução da instrução OPEN não terá êxito.
Se os label records forem especificados para o arquivo quando a instrução OPEN for executada, os labels serão processadas de acordo com as convenções padrão, da seguinte maneira:
Quando os registros de etiqueta (label records) são especificados, mas não estão presentes, ou estão presentes, mas não são especificados, a execução da instrução OPEN é imprevisível.
Na tabela a seguir, um 'X' indica que a instrução especificada, usada no modo de acesso fornecido para essa linha, pode ser usada com o modo aberto fornecido na parte superior da coluna.
Na tabela a seguir, um 'X' indica que a instrução especificada pode ser usada com o modo aberto fornecido na parte superior da coluna.
*----------------------------------------------------------------- INPUT-OUTPUT SECTION. *----------------------------------------------------------------- FILE-CONTROL. SELECT ARQENT ASSIGN TO ARQENT FILE STATUS IS WS-FS-ARQENT. SELECT ARQSAI ASSIGN TO ARQSAI FILE STATUS IS WS-FS-ARQSAI. *----------------------------------------------------------------- WORKING-STORAGE SECTION. *----------------------------------------------------------------- 01 WS-AREA-AUXILIAR. 05 WS-FS-ARQENT PIC X(002) VALUE SPACES. 05 WS-FS-ARQSAI PIC X(002) VALUE SPACES. 05 WS-PROCESSO PIC X(070) VALUE SPACES. 05 WS-MENSAGEM PIC X(070) VALUE SPACES. *----------------------------------------------------------------- PROCEDURE DIVISION. *----------------------------------------------------------------- PERFORM P100-ROTINA-INICIAL THRU P100-FIM. PERFORM P200-ROTINA-PRINCIPAL THRU P200-FIM. PERFORM P950-ROTINA-FINAL THRU P950-FIM. GOBACK. *----------------------------------------------------------------- P100-ROTINA-INICIAL. *----------------------------------------------------------------- MOVE 'P100-ROTINA-INICIAL' TO WS-PROCESSO. OPEN INPUT ARQENT. IF WS-FS-ARQENT NOT EQUAL '00' MOVE SPACES TO WS-MENSAGEM MOVE 'Erro abertura arquivo de entrada' TO WS-MENSAGEM PERFORM P900-ROTINA-ERRO THRU P900-FIM END-IF. * Também poderia ser codificado assim: IF WS-FS-ARQENT NOT EQUAL '00' MOVE SPACES TO WS-MENSAGEM STRING 'Erro abertura arquivo ARQENT FILE STATUS: ' WS-FS-ARQENT DELIMITED BY SIZE INTO WS-MENSAGEM END-STRING PERFORM P950-ROTINA-ERRO THRU P950-FIM END-IF. OPEN OUTPUT ARQSAI. IF WS-FS-ARQSAI NOT EQUAL '00' MOVE SPACES TO WS-MENSAGEM MOVE 'Erro abertura arquivo de saida ' TO WS-MENSAGEM PERFORM P900-ROTINA-ERRO THRU P900-FIM END-IF. * Também poderia ser codificado assim: IF WS-FS-ARQSAI NOT EQUAL '00' MOVE SPACES TO WS-MENSAGEM STRING 'Erro abertura arquivo ARQSAI FILE STATUS: ' WS-FS-ARQSAI DELIMITED BY SIZE INTO WS-MENSAGEM END-STRING PERFORM P950-ROTINA-ERRO THRU P950-FIM END-IF. P100-FIM. EXIT. *----------------------------------------------------------------- P900-ROTINA-ERRO. *----------------------------------------------------------------- DISPLAY 'PROGRAMA XXXXXXXX' DISPLAY 'PARAGRAFO ....... - ' WS-PROCESSO DISPLAY 'MENSAGEM ....... - ' WS-MENSAGEM DISPLAY 'FILE STATUS ARQENT - ' WS-FS-ARQENT DISPLAY 'FILE STATUS ARQSAI - ' WS-FS-ARQSAI MOVE 99 TO RETURN-CODE GOBACK. P900-FIM. EXIT. *------------------------------------------------------------- P950-ROTINA-ERRO. *------------------------------------------------------------- DISPLAY '*-----------------------------------------------' DISPLAY '* ERRO FILE STATUS FIM DE PROCESSAMENTO XXXXXXXX' DISPLAY '*-----------------------------------------------' DISPLAY '* ' DISPLAY 'WS-MENSAGEM ' DISPLAY '*-----------------------------------------------' MOVE 99 TO RETURN-CODE GOBACK. P950-FIM. EXIT.