Exemplo Entendendo o Uso de Hash

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Exemplo Entendendo o Uso de Hash

Mensagem por asimoes »

Achei interessante o exemplo.

Link original: http://www.blacktdn.com.br/2012/01/blac ... z5zVdIA2Ob

Código: Selecionar todos

FUNCTION HASH()
LOCAL hPessoa  := Hb_Hash()
LOCAL hPessoas := Hb_Hash()
LOCAL nPessoa  := 0 
LOCAL nPessoas := 1000


   SET CENTURY ON

   SET DATE TO BRITISH 

   SET DATE FORMAT "mm/dd/yyyy"

   hPessoa["PESSOA"] := Hb_Hash()

   hb_HCaseMatch( hPessoa["PESSOA"] , .F. )

   hPessoa["PESSOA"]["NOME"]        := "BlackTDN"
   hPessoa["PESSOA"]["NASCIMENTO"]  := Ctod("01/01/2012")
   hPessoa["PESSOA"]["SEXO"]        := "M"
   hPessoa["PESSOA"]["PAIS"]        := "Brasil"
   hPessoa["PESSOA"]["ENDERECO"]    := "http://blacktdn.com.br"
   hPessoa["PESSOA"]["CEP"]         := "00000-000"

   ? 'hPessoa["PESSOA"]["NOME"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "NOME" ) ))

   ? 'hPessoa["PESSOA"]["NOME"] :' + Hb_hGet( hPessoa["PESSOA"] , "NOME" )

   ? Hb_Eol()
 
   ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "NASCIMENTO" ) ))

   ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + dtoc( Hb_hGet( hPessoa["PESSOA"] , "NASCIMENTO" ) )

   ? Hb_Eol()

   ? 'hPessoa["PESSOA"]["SEXO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "SEXO" )))

   ? 'hPessoa["PESSOA"]["SEXO"] :' + Hb_hGet( hPessoa["PESSOA"] , "SEXO" )

   ? Hb_Eol()

   ? 'hPessoa["PESSOA"]["PAIS"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "PAIS" )))

   ? 'hPessoa["PESSOA"]["PAIS"] :' + Hb_hGet( hPessoa["PESSOA"] , "PAIS" )

   ? Hb_Eol()
 

   ? 'hPessoa["PESSOA"]["ENDERECO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "ENDERECO" ) ))

   ? 'hPessoa["PESSOA"]["ENDERECO"] :' + Hb_hGet( hPessoa["PESSOA"] , "ENDERECO" )

   ? Hb_Eol()
   
   ? 'hPessoa["PESSOA"]["CEP"] :' + LTrim(str( Hb_hPos( hPessoa["PESSOA"] , "CEP" ) ))

   ? 'hPessoa["PESSOA"]["CEP"] :' + Hb_hGet( hPessoa["PESSOA"] , "CEP" )

   ? Hb_Eol()

   For nPessoa := 1 To 1 //nPessoas

      hPessoas[nPessoa]                         := Hb_hClone(hPessoa)

      hPessoas[nPessoa]["PESSOA"]["NOME"]       += ' ' + StrZero(nPessoa,4)

      IF ( ( nPessoa % 2 ) == 0 )

         hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] := YearSum( hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] , nPessoa )

      Else

         hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] := YearSub( hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] , nPessoa )

      EndIF

   Next nPessoa

   

   FOR EACH hPessoa in hPessoas

      ? 'hPessoa["PESSOA"]["NOME"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "NOME" ) ))

      ? 'hPessoa["PESSOA"]["NOME"] :' + Hb_hGet( hPessoa["PESSOA"] , "NOME" )

      ? Hb_Eol()

      ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "NASCIMENTO" ) ))

      ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + dtoc( Hb_hGet( hPessoa["PESSOA"] , "NASCIMENTO" ) )

      ? Hb_Eol()

      ? 'hPessoa["PESSOA"]["SEXO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "SEXO" )))

      ? 'hPessoa["PESSOA"]["SEXO"] :' + Hb_hGet( hPessoa["PESSOA"] , "SEXO" )

      ? Hb_Eol()

      ? 'hPessoa["PESSOA"]["PAIS"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "PAIS" )))

      ? 'hPessoa["PESSOA"]["PAIS"] :' + Hb_hGet( hPessoa["PESSOA"] , "PAIS" )

      ? Hb_Eol()

      ? 'hPessoa["PESSOA"]["ENDERECO"] :' + LTrim(str(Hb_hPos( hPessoa["PESSOA"] , "ENDERECO" ) ))

      ? 'hPessoa["PESSOA"]["ENDERECO"] :' + Hb_hGet( hPessoa["PESSOA"] , "ENDERECO" )

      ? Hb_Eol()

      ? 'hPessoa["PESSOA"]["CEP"] :' + LTrim(str( Hb_hPos( hPessoa["PESSOA"] , "CEP" ) ))

      ? 'hPessoa["PESSOA"]["CEP"] :' + Hb_hGet( hPessoa["PESSOA"] , "CEP" )

      ? Hb_Eol()
 

   NEXT EACH \\hPessoa

   inkey(0)

Return( .T. )

 

Function Day2Str( uData )

   Local cType := ValType( uData )

IF ( cType == "D" )

   Return( StrZero( Day( uData ) , 2 ) )

ElseIF ( cType == "N" )

   Return( StrZero( uData , 2 ) )

ElseIF ( cType == "C" )

   Return( StrZero( Val( uData ) , 2 ) )

EndIF

 

Function Month2Str( uData )

   Local cType := ValType( uData )

IF ( cType == "D" )

   Return( StrZero( Month( uData ) , 2 ) )

ElseIF ( cType == "N" )

   Return( StrZero( uData , 2 ) )

ElseIF ( cType == "C" )

   Return( StrZero( Val( uData ) , 2 ) )

EndIF

 

Function Year2Str( uData )

   Local cType := ValType( uData )

IF ( cType == "D" )

   Return( StrZero( Year( uData ) , 4 ) )

ElseIF ( cType == "N" )

   Return( StrZero( uData , 4 ) )

ElseIF ( cType == "C" )

   Return( StrZero( Val( uData ) , 4 ) )

EndIF

 

Function Last_Day( dDate )

 

   Local nMonth

   Local nYear

 

   IF ( ValType( dDate ) == "C" )

      dDate := CToD( dDate )   

   EndIF

 

   nMonth := ( Month( dDate ) + 1 )

   nYear  := Year( dDate )

   IF ( nMonth > 12 )

      nMonth := 1

      ++nYear

   EndIF

 

   dDate := CToD( "01/" + Month2Str( nMonth ) + "/" + Year2Str( nYear ) )

   dDate -= 1

 

Return( Day( dDate ) )

 

Function YearSum( dDate , nYear )

 

   Local nMonthAux := Month( dDate )

   Local nDayAux   := Day( dDate )

   Local nYearAux  := Year( dDate )

 

   nYearAux += nYear

   dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

   IF Empty( dDate )

      dDate   := Ctod( Day2Str( 1 ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

      nDayAux := Last_Day( dDate )

      dDate   := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

   EndIF

 

Return( dDate )

 

Function YearSub( dDate , nYear )

 

   Local nMonthAux := Month( dDate )

   Local nDayAux   := Day( dDate )

   Local nYearAux  := Year( dDate )

 

   nYearAux -= nYear

   dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

   IF Empty( dDate )

      dDate   := Ctod( Day2Str( 1 ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

      nDayAux := Last_Day( dDate )

      dDate   := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )

   EndIF


Return( dDate )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Exemplo Entendendo o Uso de Hash

Mensagem por JoséQuintas »

hazael escreveu:Talvez o HASH possa ser usado para carregar um arquivo XML da NFe, por exemplo, assim ficaria mais fácil.
Por enquanto no Danfe da sefazclass ainda usa por hash.
Ainda não eliminei isso.

Sinceramente, ainda não vi nada onde isso poderia trazer vantagens.
Não sei no futuro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder