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 testa a validade de uma data. O formato da data é DDMMAA. Sintaxe:
PLUS CDATE <data> TO <resposta>
Onde:
. 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 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 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 é 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 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 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 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 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 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 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 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
<< Anterior | dBASE II | Próxima >> |