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'.