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 poderá ser utilizado para outro item de dados. Assim, o mesmo armazenamento pode ser referido com diferentes itens de dados.
01 WS-NAME. 05 WS-FIRST-NAME PIC X(05) VALUE 'KALAI'. 05 WS-FILLER PIC X(01) VALUE SPACES. 05 WS-LAST-NAME PIC X(05) VALUE 'SRINI'. 01 WS-FULL-NAME REDEFINES WS-NAME PIC X(11). |
A seguir estão os detalhes dos parâmetros usados -
WS-NAME is Redefined Item
WS-FULL-NAME is Redefining Item
No exemplo acima, WS-TOTAL-NAME usará a mesma área de memória alocada para WS-NAME. Então Ws-TOTAL-NAME terá 'KALAI SRINI'
Vejamos outro exemplo abaixo,
01 WS-OLD PIC X(10). 01 |
A seguir estão os detalhes dos parâmetros usados -
WS-OLD is Redefined Item
WS-NEW1 and WS-NEW2 are Redefining Item
Tips:
O número do nível do Item Redefinido e do Item Redefinido deve ser o mesmo.
A definição de redefine 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.
Um item redefinido sempre terá o mesmo valor de um item redefinido.
REDEFINES não pode ser usado em uma entrada de nível 01 na Seção de Arquivo.
O número de caracteres não precisa ser o mesmo para Item redefinido e Item redefinido. O compilador gera um aviso se o número de caracteres no item Redefinindo for maior que o item Redefinido.
Vários itens de dados podem redefinir o mesmo item de dados.
Exemplo: Vejamos outro exemplo,
IDENTIFICATION DIVISION. PROGRAM-ID. CBLREDEF. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-DESCRIPTION. 05 WS-DATE1. 10 WS-YEAR PIC X(4) VALUE '2020'. 10 WS-MONTH PIC X(2) VALUE '08'. 10 WS-DATE PIC X(2) VALUE '20'. 05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8). PROCEDURE DIVISION. DISPLAY "WS-DATE1 : "WS-DATE1. DISPLAY "WS-DATE2 : "WS-DATE2. GOBACK. |
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
WS-DATE1 : 20200820 WS-DATE2 : 20200820 |
A cláusula RENAMES é usada para reagrupar itens de dados elementares e dá um nome a eles. A cláusula REDEFINES permite que você use diferentes entradas de descrições de dados para descrever a mesma área de memória.