Página 1 de 1
Classe para consulta de CEP
Enviado: 07 Nov 2013 15:25
por bencz
Código: Selecionar todos
#include "hbxml.ch"
#include "hbclass.ch"
function main()
local cep := BuscaCEP():New("99999999")
? cep:GetTipo() + " " + cep:GetLogradouro()
? cep:GetBairro()
? cep:GetCidade()
? cep:GetUF()
return nil
class BuscaCEP
private:
data cLogradouro init ""
data cBairro init ""
data cCidade init ""
data cTipo init ""
data cCep init ""
data cUF init ""
data cSrvResp init ""
public:
method new(cep) constructor
method busca(cep)
inline method GetLogradouro()
return ::cLogradouro
endmethod
inline method GetBairro()
return ::cBairro
endmethod
inline method GetCidade()
return ::cCidade
endmethod
inline method GetTipo()
return ::cTipo
endmethod
inline method GetUF()
return ::cUF
endmethod
inline method GetSrvSts()
return ::cSrvResp
endmethod
endclass
method new(cep) class BuscaCEP
if cep != nil
::cCep := cep
else
::cCep := "99999999"
endif
::busca()
return self
method busca(cep) class BuscaCEP
local oHttp, cXML
local oDoc, oIterator
if cep != nil
::cCep := cep
endif
oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+::cCep+"&formato=xml" )
oHttp:open()
cXML := oHttp:readAll()
oHttp:close()
oDoc := TXmlDocument():New(cXML, HBXML_STYLE_NOESCAPE)
if oDoc:nError != HBXML_ERROR_NONE
? "Erro ao ler o XML dos correios"
endif
oIterator := TXmlIterator():New( oDoc:findfirst( "webservicecep" ) )
if oIterator:Next():cData == "1"
::cSrvResp := oIterator:Next():cData
::cUF := oIterator:Next():cData
::cCidade := oIterator:Next():cData
::cBairro := oIterator:Next():cData
::cTipo := oIterator:Next():cData
::cLogradouro := oIterator:Next():cData
else
? "ERRO :("
endif
return nil
Classe para consulta de CEP
Enviado: 08 Nov 2013 02:50
por alxsts
Olá!
Muito bacana! Obrigado por compartilhar. Vou testar.
Interessante: atualmente, muitos tópicos postados neste site, que é o maior site ativo a tratar de um dinossauro chamado xBase, exemplificam programação orientada a objetos. Seria a a prova concreta da sobrevivência da alma?
Classe para consulta de CEP
Enviado: 08 Nov 2013 09:09
por bencz
"Interessante: atualmente, muitos tópicos postados neste site, que é o maior site ativo a tratar de um dinossauro chamado xBase, exemplificam programação orientada a objetos. Seria a a prova concreta da sobrevivência da alma?", Alexandre
Lindo isto que você postou Alexandre
Bom, eu sou adepto a programação OO para no xBase, repare que praticamente em todos os exemplos que postei, utilizo apenas a programação OO, acho muito legal a programação xBase em conjunto com OO.
Poderiamos fazer um incentivo aqui na comunidade, oque acha ?
Classe para consulta de CEP
Enviado: 08 Nov 2013 10:08
por fladimir
Olha eu não entendo muito de OOP mas to dentro no q eu puder ajudar/aprender vamos juntos.
[]´s
Classe para consulta de CEP
Enviado: 08 Nov 2013 18:58
por JoséQuintas
Como eu já falei aqui no grupo, tem horas que não sei se estou facilitando ou complicando.
Na sua classe, sinceramente, achei que complicou o que não precisava complicar.
Aqui minha rotina é esta, que uso durante os GETs de cadastro:
Código: Selecionar todos
@ 1, 0 SAY "CEP:" GET mCep PICTURE "99999-999" VALID CepOk( @mCep, @mEndereco, @mCidade, @mUf )
@ Row()+1, 0 SAY "Endereco:" GET mEndereco
@ Row()+1, 0 SAY "Número:" GET mNumero
@ Row()+1, 0 SAY "Cidade:" GET mCidade
@ Row()+1, 0 SAY "UF:" GET mUF
READ
FUNCTION CepOk( mCep, mEndereco, mBairro, mCidade, mUf )
LOCAL mTexto
IF Val( SoNumeros( mCep ) ) == 0
RETURN .T.
ENDIF
mTexto := WebCep( mCep )
mUf := Pad( XmlNode( mTexto, "UF" ), 2 )
mCidade := Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
mBairro := Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
mEndereco := Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
RETURN .T.
Classe para consulta de CEP
Enviado: 09 Nov 2013 13:17
por bencz
JoséQuintas, boa tarde!
BOm, a sua versão é funcional sim, comletamente, mas ai acabamos voltando para a ideia de programação tradicional do xBase, a idéia q eu quis apresentar é simplesmente a ideia do POO com xBase

Classe para consulta de CEP
Enviado: 09 Nov 2013 22:03
por JoséQuintas
Programação tradicional do xbase?
Que tal em VB?
Código: Selecionar todos
PUBLIC FUNCTION CepOk( mCep As String, mEndereco As String, mBairro As String, mCidade As String, mUf As String)
DIM mTexto AS String
IF Val( SoNumeros( mCep ) ) = 0
RETURN TRUE
ENDIF
mTexto = WebCep( mCep )
mUf = Pad( XmlNode( mTexto, "UF" ), 2 )
mCidade = Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
mBairro = Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
mEndereco = Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
RETURN TRUE
Seu exemplo pode ser usado como está, pode ser usado pra aprender OOP, pra fazer um webservice, ou pra usar a biblioteca de XML.
O exemplo é válido.
OOP é ótimo, uso muito. Eu só comentei que acho que pra esse caso só complica.