Apesar de não ter implementado, pensei: “para economizar um byte na transmissão de dados, poderia enviar o ano mais o dia em juliano (de 1 a 365)”. Era bobeira minha… 1 byte… mas para elguém isso pode ajudar.
A maneira mais fácil é a seguinte:
DEFINE DATA LOCAL
1 #DATA-DMAC (A8) INIT <'05051984'> /* nasci nesse dia ![]()
1 #DATE-D (D)
1 #DATE-J (A7)
END-DEFINE
*
*** VOCE PODE RECEBER ESSA DATA DA TELA OU PARM
*
IF #DATE-DMAC NE MASK (MMDDYYYY)
OR #DATE-DMAC NE MASK (....1930:2014)
WRITE 'O CAMPO #DMAC NAO ESTA NO FORMATO DDMMAAAA.' #DATE-DMAC
STOP
END-IF
*
MOVE EDITED #DATE-DMAC TO #DATE-D (EM=DDMMYYYY)
MOVE EDITED #DATE-D (EM=YYYYJJJ) TO #DATE-J
*
WRITE '=' #DATE-DMAC / '=' #DATE-D / '=' #DATE-J
*
END
DMAC significa Dia, Mês e Ano Completo.
- A primeira máscara verifica se a data possui um formato válido de dia, mês e ano, e depois verifica o intervalo do ano (eu coloquei de 1930, primeira Copa do Mundo, e 2014, a segunda Copa no Brasil); Se não estiver dentro dessas máscaras, mostro uma mensagem de erro.
- Movo para uma variável do tipo DATE, dizendo que a máscara do campo é DDMMAAAA, para ela saber os valores corretos.
- Movo o conteúdo da variável no formato D para uma no formato A com o valor do ano e o dia do ano
- Mostro uma data em cada linha (a barra no WRITE faz isso)
Esse exemplo foi baseado – copiado e levemente modificado para uso – do fórum da Software AG sobre Natural: http://tech.forums.softwareag.com/viewtopic.php?t=13788
Novembro 17, 2009 às 12:21 pm |
Alguma dica de como tratar identificar caracteres nao reconnhecidos pelo natural?
Novembro 18, 2009 às 11:29 pm |
Olá Ailton,
Fizemos recentemente um tratamento para dados que vêm de outra plataforma: criamos um array com os caracteres válidos e usamos o EXAMINE. Validamos se cada caractere da string de entrada corresponde à máscara escolhida (A,C,P etc) e se está no array de caracteres que aceito: (%$&#@…); quando não corresponde à condição, no caso da nossa rotina, substituímos por “?”.
Dezembro 2, 2009 às 5:46 pm |
OK, justamente o que eu estava fazendo, mas acho que o natural trabalha também com caracteres asc ou hexadecimal, mas preciso dos codigos de cada tecla.