COBOL - verbos de manuseio de arquivos
Os verbos de manipulação de arquivos são usados para realizar várias operações em arquivos. A seguir estão os verbos de manipulação de arquivos -
- Open
- Read
- Write
- Rewrite
- Delete
- Start
- Close
Verbo aberto
Abrir é a primeira operação de arquivo que deve ser executada. Se a abertura for bem-sucedida, apenas outras operações serão possíveis em um arquivo. Somente depois de abrir um arquivo, as variáveis na estrutura do arquivo estão disponíveis para processamento.FILE STATUS variável é atualizada após cada operação de arquivo.
Sintaxe
OPEN "mode" file-name.
Aqui, o nome do arquivo é uma string literal, que você usará para nomear seu arquivo. Um arquivo pode ser aberto nos seguintes modos -
Sr. Não. | Modo e descrição |
---|---|
1 | Input O modo de entrada é usado para arquivos existentes. Neste modo, podemos apenas ler o arquivo, nenhuma outra operação é permitida no arquivo. |
2 | Output O modo de saída é usado para inserir registros em arquivos. Se umsequential fileé usado e o arquivo está mantendo alguns registros, então os registros existentes serão excluídos primeiro e, em seguida, novos registros serão inseridos no arquivo. Isso não vai acontecer no caso de umindexed file ou um relative file. |
3 | Extend O modo de extensão é usado para anexar registros em um sequential file. Neste modo, os registros são inseridos no final. Se o modo de acesso ao arquivo forRandom ou Dynamic, o modo de extensão não pode ser usado. |
4 | I-O O modo de entrada-saída é usado para ler e reescrever os registros de um arquivo. |
Leia Verbo
Ler verbo é usado para ler os registros do arquivo. A função de leitura é buscar registros de um arquivo. Em cada verbo lido, apenas um registro pode ser lido na estrutura do arquivo. Para realizar uma operação de leitura, abra o arquivo no modo INPUT ou IO. A cada instrução de leitura, o ponteiro do arquivo é incrementado e, portanto, os registros sucessivos são lidos.
Sintaxe
A seguir está a sintaxe para ler os registros quando o modo de acesso ao arquivo é sequencial -
READ file-name NEXT RECORD INTO ws-file-structure
AT END DISPLAY 'End of File'
NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.
A seguir estão os parâmetros usados -
NEXT RECORD é opcional e é especificado quando um arquivo sequencial indexado está sendo lido sequencialmente.
A cláusula INTO é opcional. ws-file-structure é definida na WorkingStorage Section para obter os valores da instrução READ.
A condição AT END torna-se True quando o final do arquivo é alcançado.
Example- O exemplo a seguir lê um arquivo existente usando a organização sequencial de linha. Este programa pode ser compilado e executado usandoLive Demo opção onde irá mostrar todos os registros presentes no arquivo.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE STUDENT.
STOP RUN.
Suponha que os dados do arquivo de entrada disponíveis no input.txt arquivo contém o seguinte -
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Sintaxe
A seguir está a sintaxe para escrever um registro quando o modo de acesso ao arquivo é aleatório -
READ file-name RECORD INTO ws-file-structure
KEY IS rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.
Example- O exemplo a seguir lê um arquivo existente usando organização indexada. Este programa pode ser compilado e executado usandoJCLem Mainframes onde exibirá todos os registros presentes no arquivo. No servidor Mainframes, não usamos arquivos de texto; em vez disso, usamos arquivos PS.
Vamos supor que o arquivo presente em Mainframes tenha o mesmo conteúdo do arquivo input.txt no exemplo acima.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
MOVE 20005 TO STUDENT-ID.
READ STUDENT RECORD INTO WS-STUDENT-FILE
KEY IS STUDENT-ID
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY WS-STUDENT-FILE
END-READ.
CLOSE STUDENT.
STOP RUN.
JCL para executar o programa COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
20005 Amitabh Bachhan
Escreva Verbo
O verbo escrever é usado para inserir registros em um arquivo. Depois que o registro é gravado, ele não está mais disponível no buffer de registro. Antes de inserir registros no arquivo, mova os valores para o buffer de registro e execute o verbo de escrita.
A instrução de gravação pode ser usada com FROMopção de gravar registros diretamente das variáveis de armazenamento de trabalho. From é uma cláusula opcional. Se o modo de acesso for sequencial, para gravar um registro, o arquivo deve ser aberto no modo Saída ou no modo Extend. Se o modo de acesso for aleatório ou dinâmico, para gravar um registro, o arquivo deve ser aberto no modo Saída ou modo IO.
Sintaxe
A seguir está a sintaxe para ler um registro quando a organização do arquivo é sequencial -
WRITE record-buffer [FROM ws-file-structure]
END-WRITE.
A seguir está a sintaxe para ler um registro quando a organização do arquivo é indexada ou relativa -
WRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.
Example - O exemplo a seguir mostra como inserir um novo registro em um novo arquivo quando a organização é sequencial.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN EXTEND STUDENT.
MOVE 1000 TO STUDENT-ID.
MOVE 'Tim' TO NAME.
MOVE '10' TO CLASS.
WRITE STUDENT-FILE
END-WRITE.
CLOSE STUDENT.
STOP RUN.
JCL para executar o programa COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
Quando você compila e executa o programa acima, ele adiciona um novo registro ao arquivo de saída.
1000 Tim 10
Reescrever Verbo
O verbo reescrever é usado para atualizar os registros. O arquivo deve ser aberto no modo IO para operações de reescrita. Ele pode ser usado somente após uma operação de leitura bem-sucedida. Reescrever o verbo sobrescreve o último registro lido.
Sintaxe
A seguir está a sintaxe para ler um registro quando a organização do arquivo é sequencial -
REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.
A seguir está a sintaxe para ler um registro quando a organização do arquivo é indexada ou relativa -
REWRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.
Example - O exemplo a seguir mostra como atualizar um registro existente que inserimos na etapa de gravação anterior -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
READ STUDENT
KEY IS STUDENT-ID
INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’
END-READ.
MOVE 'Tim Dumais' TO NAME.
REWRITE STUDENT-FILE
END-REWRITE.
CLOSE STUDENT.
STOP RUN.
JCL para executar o programa COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Quando você compila e executa o programa acima, ele atualiza o registro -
1000 Tim Dumais 10
Apagar Verbo
Excluir verbo pode ser executado apenas em arquivos indexados e relativos. O arquivo deve ser aberto no modo IO. Na organização de arquivos sequenciais, os registros não podem ser excluídos. O último registro lido pela instrução Read é excluído no caso do modo de acesso sequencial. No modo de acesso aleatório, especifique a chave de registro e execute a operação Excluir.
Sintaxe
A seguir está a sintaxe para excluir um registro -
DELETE file-name RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
Example - para excluir um registro existente -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
DELETE STUDENT RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
CLOSE STUDENT.
STOP RUN.
JCL para executar o programa COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Record Deleted
Iniciar Verbo
O verbo de início pode ser executado apenas em arquivos indexados e relativos. É usado para colocar o ponteiro do arquivo em um registro específico. O modo de acesso deve ser sequencial ou dinâmico. O arquivo deve ser aberto no modo IO ou Entrada.
Sintaxe
A seguir está a sintaxe para colocar o ponteiro em um registro específico -
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.
Fechar Verbo
O verbo Fechar é usado para fechar um arquivo. Após executar a operação Fechar, as variáveis na estrutura do arquivo não estarão disponíveis para processamento. O vínculo entre o programa e o arquivo foi perdido.
Sintaxe
A seguir está a sintaxe para fechar um arquivo -
CLOSE file-name.