bom dia amigos... tenho que fazer uma validação de email...para isso ternho que verificar como acho "@" no meio da minha variavel... como faço pra verificar se existe o "@"??? abraço
Alexandre, Uma forma simples é usar as funções INDEX e R-INDEX. Ambas procuram uma string dentro de outra, mas a R-INDEX começa do final. Ambas retornam um INT informando em que posição encontraram a string, ou 0 se não foi encontrado. Como um e-mail só pode ter um @, você pode verificar se a posição começando do início e do fim é a mesma. Se não for, há mais de 1 @.
Na verdade, para validar e-mail o melhor era usar uma expressão regular. Alguém sabe como fazer isso em Progress? Em qualquer linguagem é bem simples, mas eu não conheço em Progress...
Olá.. fiz uma include certa vez que valida o e-mail.. segue codigo: Código: /*Observacoes: {1} - Recebe o campo com o valor do e-mail {2} - Retorna um valor logico se o e-mail e valido ou nao yes (e-mail valida) | false (e-mail invalido) {3} - seta variavel para mais de uma chamada no programa*/ def var {3}icont as int init 0. def var {3}contponto as int init 0. def var {3}contarroba as int init 0. def var {3}vmail2 as char. def var {3}vchar as char init " ,/,:,;,(,),=,',`,^,~,á,à,é,è,í,ì,ó,Ò,ã,ñ,ç,+,&,#,$,%,?,!,*,\,|". assign {2} = true. /** VALIDA TAMANHO DO E-MAIL **/ if length({1}) < 5 then assign {2} = false. /** VALIDA NUMERO DE @ **/ {3}contarroba = 0. do {3}icont = 1 to length({1}): if (lookup(substring({1}, {3}icont, 1), "@") > 0) then {3}contarroba = {3}contarroba + 1. end. if {3}contarroba > 1 or {3}contarroba = 0 then assign {2} = false. else do: /** VALIDA SE PRIMEIRO OU ULTIMO EH . OU @ **/ if substring({1}, 1, 1) = "@" or substring({1}, 1, 1) = "." or substring({1}, length({1}), 1) = "@" or substring({1}, length({1}), 1) = "." then assign {2} = false. /** VALIDA SE APOS OU ANTES DA @ EH . **/ else if substring({1}, r-index({1}, "@") - 1, 1) = "." or substring({1}, r-index({1}, "@") + 1, 1) = "." then assign {2} = false. end. /** VALIDA CARACTERES ESPECIAIS E SEQUENCIA .. **/ do {3}icont = 1 to length({1}): if lookup(substring({1}, {3}icont, 1), {3}vchar) > 0 then assign {2} = false. if lookup(substring({1}, {3}icont, 2), "..") > 0 then assign {2} = false. end. /** VALIDA SE PRIMEIRO OU ULTIMO EH . OU @ **/ /*if substring({1}, 1, 1) = "@" or substring({1}, 1, 1) = "." or substring({1}, length({1}), 1) = "@" or substring({1}, length({1}), 1) = "." then assign {2} = false.*/ /** VALIDA A QUANTIDADE DE . APOS @ **/ {3}vmail2 = "". {3}contponto = 0. {3}vmail2 = substring({1}, index({1}, "@") + 1, length({1})). do {3}icont = 1 to length({3}vmail2): if lookup(substring({3}vmail2, {3}icont, 1), ".") > 0 then {3}contponto = {3}contponto + 1. end. if {3}contponto = 0 or {3}contponto > 3 then assign {2} = false. e a chamada foi feita assim: Código: def var mailval as log initial true no-undo. [todo o codigo..] do on error undo: update TABELA.CAMPO colon 25 format "x(40)". if TABELA.CAMPO <> "" then do: mailval = true. {INCLUDE.i TABELA.CAMPO mailval a}. if not mailval then do: bell. message "Endereco eletronico invalido, verifique!". pause. hide message no-pause. undo. end. end. end.