Curso de dBASE II
As funções PLUS


Você está em: MarMSX >> Cursos >> dBASE II - Programável

As funções PLUS

A versão plus do dBASE II trouxe algumas funcionalidades interessantes tais como validação de data, número de dias entre datas, conversão para o sistema de numeração europeu, inserção de zeros à esquerda, validação de CPF etc.

O comando PLUS CDATE

O comando PLUS CDATE testa a validade de uma data. O formato da data é DDMMAA. Sintaxe:

PLUS CDATE <data> TO <resposta>

Onde:

Exemplo:
. store " " to resposta
. store "040224" to data
. plus cdate data to resposta
. ? resposta
1

O valor do teste é armazenado em "resposta", e é 1 para datas corretas e 0 para datas incorretas.

O comando PLUS DDATE

O comando PLUS DDATE calcula o número de dias entre duas datas. Sintaxe:

PLUS DDATE <data1> <data2> TO <resposta>

O parâmetro "resposta" deverá ser inicializado com uma string de cinco espaços vazios.

. store "     " to resposta
. store "040224" to data1
. store "140224" to data2
. plus ddate data1 data2 to resposta
. ? resposta
"00010"

O programa compara as datas 04 de fevereiro de 2024 e 10 de fevereiro de 2024. Observe que data1 é a data mais antiga.

O comando descrito nesta seção funciona bem para duas datas do mesmo século. Caso tente calcular o número de dias de vida de uma pessoa que nasceu no século XX com uma data do século XXI, a função irá falhar, pois entende que as datas estão no mesmo século. Por exemplo, se data1 for "301299" e data2 for "010100", a resposta é de 29077 dias.

O comando PLUS ADATE

O comando PLUS ADATE adiciona um certo número de dias a uma data. O valor máximo é de 242 dias. Sintaxe:

PLUS ADATE <data> <dias> <flag> to <resposta>

Onde:

Exemplo:

. store "040224" to data
. store "010" to dias
. store "0" to flag
. store "      " to resposta
. plus adate data dias flag to resposta
. ? resposta
140224

O comando PLUS TDATE

O comando PLUS TDATE é parecido com o comando PLUS ADATE, mas transfere a data futura para a próxima segunda-feira, caso caia em um sábado ou domingo.

Exemplo:

. store "070292" to data
. store "001" to dias
. store "0" to flag
. store "      " to resposta
. plus tdate data dias flag to resposta
. ? resposta
100292

O calendário do dBASE II é do século XX. Dessa forma, utilizamos a data 07/02/1992 que caiu em uma sexta-feira. Ao acrescentar um dia, a data de resposta é 10/02/1992, que era em uma segunda-feira.

O comando CHANGE

O comando CHANGE permite alterar o sistema numérico americano (vírgula para os milhares e ponto para decimal) para o europeu (o inverso do americano). Sintaxe:

PLUS CHANGE <valor_americano> to <valor_europeu>

Exemplo:

. store "1,000,000.00" to valame
. store "            " to valeur
. plus change valame to valeur
? valeur
1.000.000,00

Obs: a variável "valor_europeu" deverá ter o mesmo comprimento da variável "valor_americano".

O comando FORMAT

O comando FORMAT permite converter um número para o formato europeu. Sintaxe:

FORMAT <num_sem_virgula_ou_ponto> <num_casas_decimais> to <num_formatado>

Exemplo:

. store "1234567" to num
. store "2" to dec
. store "         " to resp
. plus format num dec to resp
. ? resp
12.345,67

O comando PLUS LZERO

O comando PLUS LZERO troca os espaços em branco à esquerda de uma string com números por zeros. Sintaxe:

PLUS LZERO <num> to <novo_num>

Exemplo:

. store "  10" to num
. store "    " to novonum
. plus lzero num to novonum
? novonum
0010

O comando PLUS MOD11

O comando PLUS MOD11 permite obter o dígito verificador, através do método "módulo 11" [2], para uma string com números de comprimento igual a 10. Sintaxe:

PLUS MOD11 <numero> to <digito_verificador>

Segundo [2], o cálculo do dígito verificador é feito da seguinte maneira:

  ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐   ┌───┐
  │ 1 │ 2 │ 0 │ 1 │ 6 │ 1 │ 1 │ 2 │ 2 │ 7 │ ─ │ 3 │
  └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘   └───┘
    |   |   |   |   |   |   |   |   |   |  
    x3  x2  x9  x8  x7  x6  x5  x4  x3  x2
    |   |   |   |   |   |   |   |   |   |
    =3	=4  =0	=8  =42	=6  =5  =8  =6	=14 soma = 96
	
    └───┴───┴───┴───┴───┴─> = (96 * 10 / 11) = 87, resto 3 => DV = 11 - 3 = 8

Exemplo:

. store " " to dv
. store "1202611227" to num
. plus mod11 num to dv
. ? dv
3

O comando PLUS CGC

O comando PLUS CGC permite verificar a validade de um CGC (Cadastro Geral de Contribuintes). Atualmente no Brasil, o CNPJ substituiu o CGC [3]. Sintaxe:

PLUS CGC <numero_cgc> to <resposta>

O CGC e CNPJ possuem 14 dígitos, onde até 1993 o oitavo dígito era obtido através da função módulo 10 calculada com os sete primeiros dígitos [4]. Depois, este cálculo foi abandonado e o oitavo dígito é um número qualquer. Assim, para os CNPJs atuais, a função não funciona. Em [4], encontramos um exeplo de CGC que atende dos requisitos da época do dBASE II.

Exemplo:

. store "18782203000128" to ncgc
. store " " to resposta
. plus cgc ncgc to resposta
. ? resposta
1

A resposta é 1 para CGC válido e 0 para CGC inválido.

O comando PLUS CPF

O comando PLUS CPF permite verificar a validade de um CPF (Cadastro de Pessoas Físicas). Sintaxe:

PLUS CPF <numero_cpf> to <resposta>

O CPF possui 11 dígitos.

Exemplo:

. store "000000000000" to ncpf
. store " " to resposta
. plus cpf ncpf to resposta
. ? resposta
1

A resposta é 1 para CPF válido e 0 para CPF inválido.

O comando PLUS CODE

O comando PLUS CODE permite a digitação de uma senha, sem aparecer os caracteres digitados. É acompanhado da mensagem "Entre com a senha:" em português. Sintaxe:

PLUS CODE <linha> <coluna> to <senha>

Exemplo:

. store "02" to linha
. store "00" to coluna
. store "      " to senha
. plus code linha coluna to senha

A senha digitada é armazenada na variável "senha". Para conferir, uma sugestão de [1] é fazer o seguinte:

store chr(65)+chr(66)+chr(67)+chr(68)+chr(69)+chr(70) to segredo
if senha = segredo
  ? "Acesso autorizado"
else
  ? "Acesso negado"
endif

A variável segredo possui a string "ABCDEF" codificada pela função ASCII chr().



Referências:

[1]- dBASE II PLUS para MSX programável - curso prático, Nelson Casari, Ed. Atlas, 1989.

[2]- Dígito Verificador - Wikipedia, em: https://pt.wikipedia.org/wiki/D%C3%ADgito_verificador

[3]- Cadastro Nacional de Pessoa Jurídica - Wikipedia, em: https://pt.wikipedia.org/wiki/Cadastro_Nacional_da_Pessoa_Jur%C3%ADdica

[4]- Cálculo digitos de verificação - CPF CNPJ CAEPF, em: https://www.cadcobol.com.br/calcula_cpf_cnpj_caepf.htm