COBOL - Layout de Dados

Layout COBOL é a descrição de uso de cada campo e os valores presentes nele. A seguir estão as entradas de descrição de dados usadas em COBOL -

  • Cláusula de redefinições
  • Renomear Cláusula
  • Cláusula de Uso
  • Copybooks

Cláusula de redefinições

A cláusula Redefines é usada para definir um armazenamento com diferentes descrições de dados. Se um ou mais itens de dados não forem usados ​​simultaneamente, o mesmo armazenamento pode ser usado para outro item de dados. Portanto, o mesmo armazenamento pode ser referido com diferentes itens de dados.

Sintaxe

A seguir está a sintaxe para a cláusula Redefines -

01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).

A seguir estão os detalhes dos parâmetros usados ​​-

  • WS-OLD é um item redefinido
  • WS-NEW1 e WS-NEW2 são itens de redefinição

Números de nível de item redefinido e item de redefinição devem ser iguais e não podem ser 66 ou 88 números de nível. Não use a cláusula VALUE com um item de redefinição. Na seção de arquivo, não use uma cláusula de redefinição com o número de 01 nível. A definição de redefinições deve ser a próxima descrição de dados que você deseja redefinir. Um item redefinido sempre terá o mesmo valor de um item redefinido.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-DATE1 VALUE '20140831'.
   10 WS-YEAR PIC X(4).
   10 WS-MONTH PIC X(2).
   10 WS-DATE PIC X(2).
   05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).

PROCEDURE DIVISION.
   DISPLAY "WS-DATE1 : "WS-DATE1.
   DISPLAY "WS-DATE2 : "WS-DATE2.

STOP RUN.

JCL para executar o programa COBOL acima -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Quando você compila e executa o programa acima, ele produz o seguinte resultado -

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Renomear Cláusula

A cláusula Renames é usada para dar nomes diferentes aos itens de dados existentes. É usado para reagrupar os nomes dos dados e dar um novo nome a eles. Os novos nomes de dados podem ser renomeados em grupos ou itens elementares. O nível número 66 é reservado para renomeações.

Syntax

A seguir está a sintaxe para a cláusula Renames -

01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.

Renomear só é possível no mesmo nível. No exemplo acima, WS-A, WS-B e WS-C estão no mesmo nível. A definição de renomeações deve ser a próxima descrição de dados que você deseja renomear. Não use Renames com os números de nível 01 ou, 77. Os nomes de dados usados ​​para renomeações devem vir em seqüência. Os itens de dados com cláusula ocorrer não podem ser renomeados.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-NUM.
   10 WS-NUM1 PIC 9(2) VALUE 20.
   10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
   10 WS-CHAR1 PIC X(2) VALUE 'AA'.
   10 WS-CHAR2 PIC X(2) VALUE 'BB'.
   66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.

PROCEDURE DIVISION.
   DISPLAY "WS-RENAME : " WS-RENAME.
   
STOP RUN.

JCL para executar o programa COBOL acima -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Quando você compila e executa o programa acima, ele produz o seguinte resultado -

WS-RENAME : 56AABB

Cláusula de Uso

A cláusula de uso especifica o sistema operacional no qual os dados de formato são armazenados. Não pode ser usado com os números de nível 66 ou 88. Se a cláusula de uso for especificada em um grupo, todos os itens elementares terão a mesma cláusula de uso. As diferentes opções disponíveis com a cláusula de uso são as seguintes -

Exibição

Os dados são armazenados no formato ASCII e cada caractere ocupará 1 byte. É o uso padrão.

O exemplo a seguir calcula o número de bytes necessários -

01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.

01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.

COMPUTACIONAL / COMP

O item de dados é armazenado em formato binário. Aqui, os itens de dados devem ser inteiros.

O exemplo a seguir calcula o número de bytes necessários -

01 WS-NUM PIC S9(n) USAGE IS COMP.

If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.

COMP-1

O item de dados é semelhante a Real ou Float e é representado como um número de ponto flutuante de precisão única. Internamente, os dados são armazenados em formato hexadecimal. COMP-1 não aceita a cláusula PIC. Aqui, 1 palavra é igual a 4 bytes.

COMP-2

O item de dados é semelhante a Long ou Double e é representado como um número de ponto flutuante de precisão dupla. Internamente, os dados são armazenados em formato hexadecimal. COMP-2 não especifica a cláusula PIC. Aqui, 2 palavras são iguais a 8 bytes.

COMP-3

O item de dados é armazenado no formato decimal compactado. Cada dígito ocupa meio byte (1 nibble) e o sinal é armazenado no nibble mais à direita.

O exemplo a seguir calcula o número de bytes necessários -

01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)

01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.

01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.

Cadernos

Um copybook COBOL é uma seleção de código que define estruturas de dados. Se uma estrutura de dados específica for usada em muitos programas, em vez de escrever a mesma estrutura de dados novamente, podemos usar copybooks. Usamos a instrução COPY para incluir um copybook em um programa. A instrução COPY é usada na Seção WorkingStorage.

O exemplo a seguir inclui um copybook dentro de um programa COBOL -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Aqui, ABC é o nome do caderno. Os seguintes itens de dados no copybook ABC podem ser usados ​​dentro de um programa.

01 WS-DESCRIPTION.
   05 WS-NUM.
      10 WS-NUM1 PIC 9(2) VALUE 20.
      10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
      10 WS-CHAR1 PIC X(2) VALUE 'AA'.
      10 WS-CHAR2 PIC X(2) VALUE 'BB'.