WORKING-STORAGE SECTION:
- Descreve registros de dados que não fazem parte de arquivos de dados externos, mas são desenvolvidos e processados internamente pelo programa. Os nomes de tipos podem ser definidos na seção WORKING-STORAGE.
- Itens independentes na WORKING-STORAGE que não têm relação hierárquica entre si não precisam ser agrupados em registros, desde que eles não precisam ser subdivididos.
- Cada um é definido em uma entrada descrição-item de dados separado que começa ou com o número de nível 77 ou 01.
- Para o formato e as cláusulas exigidas em uma entrada de descrição de item de dados.
- O valor inicial de qualquer item de dados na WORKING-STORAGE, exceto um item de dados de índice, é especificado associando uma cláusula VALUE ao item.
- O valor inicial de qualquer item de dados de índice ou de qualquer item de dados não associado a uma cláusula VALUE é indefinido. Nota: É permitido um máximo de 16 711 568 bytes para itens de grupo (incluindo tabelas).
- Um nome de campo não deverá exceder a 30 caracteres.
Exemplo:
*
******************************************************************
WORKING-STORAGE SECTION.
******************************************************************
*
01 DATA-ATUAL PIC 9(008).
01 FILLER REDEFINES DATA-ATUAL.
05 ANO-ATUAL PIC 9(004).
05 MES-ATUAL PIC 9(002).
05 DIA-ATUAL PIC 9(002).
77 INDEXADOR PIC 9(003) VALUE 0.
*
CONSTANTES FIGURATIVAS:
São literais geradas pelo compilador e usados como palavras reservadas. Algumas dessas palavras são descritas abaixo. Pode-se usar tanto o plural quanto o singular.
ZERO, ZEROS, ZEROES: Representa o valor numérico "zero" ou uma ou mais ocorrências do caractere 0.
SPACE, SPACES: Valor em branco, representa um ou mais espaços.
HIGH-VALUE, HIGH-VALUES: Representa o maior valor, um ou mais caracteres com valores-altos. Usualmente é o hexadecimal "FF".
LOW-VALUE, LOW-VALUES: Representa o menor valor, um ou mais caracteres com valores-baixos. Usualmente é o binário 0.
ALL Literal: Representa um conjunto de caracteres pré definido.
NULL, NULLS: Representa o valor numérico "zero“. Também representa um endereço inválido de memória quando usado em conjunto com tipos de dados POINTER.
PICTURE (PIC):
Identifica o tipo de dado que se está definindo, É usada para descrição, definição de informações sobre itens, tais como: tamanho, sinal, tipo numérico (Zonado, Compactado, Binário), alfanumérico ou alfabético.
- X – Indica campo Alfanumérico
- A – Indica campo Alfabético
- 9 – Indica campo Numérico
- V – Indica Vírgula Decimal Implícita
- S – Indica Sinal Algébrico
- Z – Indica Edição de Campos Numéricos
Exemplos de edição de inserção simples:
PICTURE | VALOR | RESULTADO |
X(10)/XX | ALPHANUMER01 | ALPHANUMER/01 |
X(5)BX(7) | ALPHANUMERIC | ALPHA NUMERIC |
99,B999,B000 | 1234 | 01, 234, 000 |
99,999 | 12345 | 12,345 |
GGBBGG | D1D2D3D4 | D1D2 D3D4 |
Exemplos de edição de inserção especial:
PICTURE | VALOR | RESULTADO |
999.99 | 1.234 | 001.23 |
999.99 | 12.34 | 012.34 |
999.99 | 123.45 | 123.45 |
999.99 | 1234.5 | 234.50 |
+999.99E+99 | 12345 | +123.45E+02 |
Exemplos de edição de inserção fixa:
PICTURE | VALOR | RESULTADO |
999.99+ | +6555.556 | 555.55+ |
+9999.99 | -6555.555 | -6555.55 |
9999.99 | +1234.56 | 1234.56 |
$999.99 | -123.45 | $123.45 |
U999.99 | -123.45 | EUR123.45 (1) |
-$999.99 | -123.456 | -$123.45 |
-u999.99 | -123.456 | -USD123.45 (2) |
-$999.99 | +123.456 | $123.45 |
$9999.99CR | +123.45 | $0123.45 |
$9999.99DB | -123.45 | $0123.45DB |
Exemplos de edição de inserção flutuante:
PICTURE | VALOR | RESULTADO |
$$$$.99 | .123 | $.12 |
$$$9.99 | .12 | $0.12 |
$,$$$,999.99 | -1234.56 | $1,234.56 |
U,UUU,UU9.99- | -1234.56 | EUR1,234.56- |
u,uuu,uu9.99 | 1234.56 | USD1,234.56 |
+,+++,999.99 | -123456.789 | -123,456.78 |
$$,$$$,$$$.99CR | -1234567 | $1,234,567.00CR |
++,+++,+++.+++ | 0000.00 |
Exemplos de edição de inserção d substituição:
PICTURE | VALOR | RESULTADO |
****.** | 0000.00 | ****.** |
ZZZZ.ZZ | 0000.00 | |
ZZZZ.99 | 0000.00 | .00 |
****.99 | 0000.00 | ****.00 |
ZZ99.99 | 0000.00 | 00.00 |
Z,ZZZ.ZZ+ | +123.456 | 123.45+ |
*,***.**+ | -123.45 | **123.45- |
**,***,***.** | +12345678.9 | 12,345,678.90+ |
$Z,ZZZ,ZZZ.ZZCR | +12345.67 | $ 12,345.67 |
$B*,***,***.**BBDB | -12345.67 | $ ***12,345.67 DB |
REDEFINES:
A cláusula REDEFINES é usada para definir um armazenamento com descrição de dados diferente. Se um ou mais itens de dados não forem usados simultaneamente, o mesmo armazenamento pode ser utilizado para outro item de dados. Assim, o mesmo armazenamento pode ser referido com diferentes itens de dados.
Exemplo:
*
******************************************************************
WORKING-STORAGE SECTION.
******************************************************************
*
01 CLIENTE-DADOS.
05 CUSTOMER-ID PIC X (10).
05 CUSTOMER-ID-PARTS REDEFINES CUSTOMER-ID.
10 LOCALIZACAO PIC X (3).
10 NAME-ABREV PIC X (5).
FILLER:
Palavra reservada , ou seja, você não pode usar a palavra para os campos ou outros do que para definir os elementos de memória individuais registros de nomes.
Você usa FILLER imediatamente após um número de nível anterior e uma cláusula de imagem que define o tamanho de um campo e tipo de dados. COBOL restringe o uso de FILLER à Divisão de dados , que não se aplica às divisões Identificação, Ambiente ou procedimento.
Exemplo:
*
******************************************************************
WORKING-STORAGE SECTION.
******************************************************************
*
01 DATA-ATUAL.
05 ANO PIC 9(004).
05 FILLER PIC X(001)VALUE '/'
05 MES PIC 9(002).
05 FILLER PIC X(001)VALUE '/'
05 DIA PIC 9(002).
05 FILLER PIC X(001)VALUE '-'
05 HH PIC 9(002).
05 FILLER PIC X(001)VALUE ':'
05 MM PIC 9(002).
05 FILLER PIC X(001)VALUE ':'
05 SS PIC 9(002).
05 FILLER PIC X(006).
Resultado: "2016/01/13-16:41:00"