quinta-feira, 10 de janeiro de 2008

TYPEDEF - Definindo tipos

Uma colaboração de Jair da Silva.

As estruturas de dados complexas ou simples que precisam ser declaradas várias vezes no mesmo programa ou em vários programas, podem ser definidas com a definição de tipos, um conceito nativo da linguagem C. Outro conveniente destas estruturas pré-definidas é que naquele momento que a memória nos falha recusando-se a lembrar qual o formato e/ou o tipo de dados deve ser definido para a chamada de uma classe ou uma função de biblioteca.

A declaração de estrutura é feita assim:

01 wsbdDataZ pic 9999/99/99 typedef.
01 wsbdDataX pic x(20) typedef.
01 wsbdDataXEd typedef.
...02 wsbdAnoX pic 9(04).
...02 f pic x(01).
...02 wsbdMesX pic 9(02).
...02 f pic x(01).
...02 wsbdDiaX pic 9(02).
...02 f pic x(01).
...02 wsbdHorX pic 9(02).
...02 f pic x(01).
...02 wsbdMinX pic 9(02).
...02 f pic x(01).
...02 wsbdSegX pic 9(02).
...02 f pic x(01).

01 wsbdData9 pic 9(08) typedef.
01 wsbdData9Ed typedef.
...02 wsbdDia9 pic 9(02).
...02 wsbdMes9 pic 9(02).
...02 wsbdAno9 pic 9(04).

Dispondo estas estruturas num arquivo à parte (um copybook, que em nosso exemplo poderia ser o arquivo tiposdef.cpy), podemos incluí-lo em qualquer ponto do programa e em qualquer programa. Aqui neste exemplo, definimos os campos com formatação de datas que são retornados pelos SGBDs mais comuns. Seu uso prático é descrito a seguir:

WORKING-STORAGE SECTION.
copy tiposdef.cpy.
01 Data-VctoX wsbdDataX.
01 Data-VctoXEd redefines Data-VctoX wsbdDataXEd.
01 Data-Vcto9 wsbdData9.

01 Data-PgtoX wsbdDataX.
01 Data-PgtoXEd redefines Data-PgtoX wsbdDataXEd.
01 Data-Pgto9 wsbdData9.

EXEC SQL
SELECT * FROM tabela (campos .... :Data-VctoX:Data-PgtoX ...)

WHERE campo-a = 'B200'
END-EXEC

Transformando a data de vencimento no padrão tupiniquim:

move wsbdDiaX of Data-VctoXEd to wsbdDia9 of Data-Vcto9.
move wsbdMesX of Data-VctoXEd to wsbdMes9 of Data-Vcto9.
move wsbdAnoX of Data-VctoXEd to wsbdAno9 of Data-Vcto9.

Agora temos em Data-Vcto9 nossa formatação tradicional.

Outros tipos podem ser criados dependendo aí da necessidade e da criatividade de cada desenvolvedor.

2 comentários:

Antonio João disse...
Este comentário foi removido pelo autor.
Antonio João disse...

Isso, isso, isso.

Eu já havia descoberto a utilidade da definição de tipo e utilizo para datas ddmmaaaa e aaaammdd, além de outras coisinhas a mais.

Pretendia fazer uma post no site do clube como titulo "Qual o seu tipo?", mas sabe como é né? Fiquei nessa de depois eu faço...