Tratativa de Campos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Tratativa de Campos

Mensagem por Pablo César »

Eolo escreveu:Vamos lá: se CAMPO é C e vc quer identificar os registros que contêm só números, é usar VAL e VALTYPE.
Mesmo assim, ainda não procede. Desculpe, mas eu testei e o resultado não é como você acha que acontece. Se fizer:

? Valtype(Val("123X4"))
? Valtype(Val("8987"))
? Valtype(Val("89x87"))
? Valtype(Val("a8987"))

O resultado sempre será: "N"

Embora não tenha ainda se falado, existe a função CHARONLY, que remove todos os caracteres menos os que estão no primeiro parâmetro. Esta função pertence a CT.LIB e existe o equivalente em Harbour também. O exemplo abaixo sintetisa o procedimento, sem varrer o conteúdo caracter por caracter:

? CHARONLY("0123456789","123X4") // "1234"
? CHARONLY("0123456789","8987") // "8987"
? CHARONLY("0123456789","89x87") // "8987"
? CHARONLY("0123456789","a8987") // "8987"
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Tratativa de Campos

Mensagem por Poka »

Essa função não serviria?


Código: Selecionar todos

//////////////
FUNCT TEMLETRA(VAR)
   LOCAL A,VAL:=.F.
   VAR:=ALLTRIM(VAR)
   //VERIFICA SE A VARIAVEL TEM ALGUMA LETRA
   // SE TIVER VOLTA POSITIVO
   FOR A:=1 TO LEN(VAR)
      IF ASC(SUBSTR(VAR,A,1)) <48 .OR.ASC(SUBSTR(VAR,A,1)) >57 // TEM LETRA
         VAL:=.T.
         EXIT
      ENDIF
   NEXT
RETURN (VAL)
/////////
FUNCT TEMNUM(VAR)
   LOCAL A,VAL:=.T.
   VAR:=ALLTRIM(VAR)
   //VERIFICA SE A VARIAVEL TEM ALGUM NUMERO
   // SE TIVER VOLTA POSITIVO
   FOR A:=1 TO LEN(VAR)
      IF ASC(SUBSTR(VAR,A,1)) <48 .OR.ASC(SUBSTR(VAR,A,1)) >57
         VAL:=.F.
         EXIT
      ENDIF
   NEXT
RETURN (VAL)


Poka
Paulo Gomes
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 29 Out 2012 10:04
Localização: Sao Paulo, SP

Tratativa de Campos

Mensagem por Paulo Gomes »

Boa tarde!!!
As sugestões aqui postadas em muito me ajudaram para a solução do problema.
A vida é um eterno aprendizado em todos os sentidos. Aqui ficou patente o espirito colaborativo do Grupo através da boa vontade e disponibilidade em compartilhar conhecimento de forma não remunerada. Certa vez escutei o seguinte, o “EU” não é maior que o “NÓS”, pra mim isso agora ficou bem claro e com bastante sentido.
Agradeço a acolhida do Grupo e também me coloco a disposição para eventuais necessidades.

Pela atenção, obrigado.

Paulo Gomes
Responder