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.