COBOL - Redefine a condição


Cláusula de Redefinição:

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 ​​-

  1. WS-NAME is Redefined Item

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

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 ​​-

  1. WS-OLD is Redefined Item

  2. WS-NEW1 and WS-NEW2 are Redefining Item

Tips:

  1. O número do nível do Item Redefinido e do Item Redefinido deve ser o mesmo.

  2. A definição de redefine deve ser a próxima descrição de dados que você deseja redefinir.

  3. Um item redefinido sempre terá o mesmo valor de um item redefinido.

  4. Um item redefinido sempre terá o mesmo valor de um item redefinido.

  5. REDEFINES não pode ser usado em uma entrada de nível 01 na Seção de Arquivo.

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

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

Pergunta da entrevista:

Diferença entre REDEFINES e RENAMES?

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.