BlackTDN :: Harbour :: Entendendo o Uso de Hash
1: Function main() 2: 3: LOCAL hPessoa := hb_hash() 4: LOCAL hPessoas := hb_hash() 5: LOCAL nPessoa := 0 6: LOCAL nPessoas := 1000 7: 8: SET CENTURY ON 9: SET DATE TO BRITISH 10: SET DATE FORMAT "mm/dd/yyyy"
11: 12: hPessoa["PESSOA"] := hb_hash()
13: hb_HSetCaseMatch( hPessoa["PESSOA"] , .F. )
14: 15: hPessoa["PESSOA"]["NOME"] := "BlackTDN"
16: hPessoa["PESSOA"]["NASCIMENTO"] := Ctod("01/01/2012")
17: hPessoa["PESSOA"]["SEXO"] := "M"
18: hPessoa["PESSOA"]["PAIS"] := "Brasil"
19: hPessoa["PESSOA"]["ENDEREÇO"] := "http://blacktdn.com.br"
20: hPessoa["PESSOA"]["CEP"] := "00000-000"
21: 22: ? 'hPessoa["PESSOA"]["NOME"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "NOME" ) ))
23: ? 'hPessoa["PESSOA"]["NOME"] :' + hb_hGet( hPessoa["PESSOA"] , "NOME" )
24: ? hb_OsNewLine() 25: 26: ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "NASCIMENTO" ) ))
27: ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + dtoc( hb_hGet( hPessoa["PESSOA"] , "NASCIMENTO" ) )
28: ? hb_OsNewLine() 29: 30: ? 'hPessoa["PESSOA"]["SEXO"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "SEXO" )))
31: ? 'hPessoa["PESSOA"]["SEXO"] :' + hb_hGet( hPessoa["PESSOA"] , "SEXO" )
32: ? hb_OsNewLine() 33: 34: ? 'hPessoa["PESSOA"]["PAIS"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "PAIS" )))
35: ? 'hPessoa["PESSOA"]["PAIS"] :' + hb_hGet( hPessoa["PESSOA"] , "PAIS" )
36: ? hb_OsNewLine() 37: 38: ? hb_AnsiToOem('hPessoa["PESSOA"]["ENDEREÇO"] :') + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "ENDEREÇO" ) ))
39: ? hb_AnsiToOem('hPessoa["PESSOA"]["ENDEREÇO"] :') + hb_hGet( hPessoa["PESSOA"] , "ENDEREÇO" )
40: ? hb_OsNewLine() 41: 42: ? 'hPessoa["PESSOA"]["CEP"] :' + LTrim(str( hb_hPos( hPessoa["PESSOA"] , "CEP" ) ))
43: ? 'hPessoa["PESSOA"]["CEP"] :' + hb_hGet( hPessoa["PESSOA"] , "CEP" )
44: ? hb_OsNewLine() 45: 46: For nPessoa := 1 To nPessoas 47: hPessoas[nPessoa] := hb_hClone(hPessoa)48: hPessoas[nPessoa]["PESSOA"]["NOME"] += ' ' + StrZero(nPessoa,4)
49: IF ( ( nPessoa % 2 ) == 0 )50: hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] := YearSum( hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] , nPessoa )
51: Else52: hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] := YearSub( hPessoas[nPessoa]["PESSOA"]["NASCIMENTO"] , nPessoa )
53: EndIF 54: Next nPessoa 55: 56: FOR EACH hPessoa in hPessoas
57: 58: ? 'hPessoa["PESSOA"]["NOME"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "NOME" ) ))
59: ? 'hPessoa["PESSOA"]["NOME"] :' + hb_hGet( hPessoa["PESSOA"] , "NOME" )
60: ? hb_OsNewLine() 61: 62: ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "NASCIMENTO" ) ))
63: ? 'hPessoa["PESSOA"]["NASCIMENTO"] :' + dtoc( hb_hGet( hPessoa["PESSOA"] , "NASCIMENTO" ) )
64: ? hb_OsNewLine() 65: 66: ? 'hPessoa["PESSOA"]["SEXO"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "SEXO" )))
67: ? 'hPessoa["PESSOA"]["SEXO"] :' + hb_hGet( hPessoa["PESSOA"] , "SEXO" )
68: ? hb_OsNewLine() 69: 70: ? 'hPessoa["PESSOA"]["PAIS"] :' + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "PAIS" )))
71: ? 'hPessoa["PESSOA"]["PAIS"] :' + hb_hGet( hPessoa["PESSOA"] , "PAIS" )
72: ? hb_OsNewLine() 73: 74: ? hb_AnsiToOem('hPessoa["PESSOA"]["ENDEREÇO"] :') + LTrim(str(hb_hPos( hPessoa["PESSOA"] , "ENDEREÇO" ) ))
75: ? hb_AnsiToOem('hPessoa["PESSOA"]["ENDEREÇO"] :') + hb_hGet( hPessoa["PESSOA"] , "ENDEREÇO" )
76: ? hb_OsNewLine() 77: 78: ? 'hPessoa["PESSOA"]["CEP"] :' + LTrim(str( hb_hPos( hPessoa["PESSOA"] , "CEP" ) ))
79: ? 'hPessoa["PESSOA"]["CEP"] :' + hb_hGet( hPessoa["PESSOA"] , "CEP" )
80: ? hb_OsNewLine() 81: 82: NEXT EACH \\hPessoa 83: 84: inkey(0) 85: 86: Return( .T. ) 87: 88: Function Day2Str( uData ) 89: Local cType := ValType( uData )90: IF ( cType == "D" )
91: Return( StrZero( Day( uData ) , 2 ) )92: ElseIF ( cType == "N" )
93: Return( StrZero( uData , 2 ) )94: ElseIF ( cType == "C" )
95: Return( StrZero( Val( uData ) , 2 ) ) 96: EndIF 97: 98: Function Month2Str( uData ) 99: Local cType := ValType( uData )100: IF ( cType == "D" )
101: Return( StrZero( Month( uData ) , 2 ) )102: ElseIF ( cType == "N" )
103: Return( StrZero( uData , 2 ) )104: ElseIF ( cType == "C" )
105: Return( StrZero( Val( uData ) , 2 ) ) 106: EndIF 107: 108: Function Year2Str( uData ) 109: Local cType := ValType( uData )110: IF ( cType == "D" )
111: Return( StrZero( Year( uData ) , 4 ) )112: ElseIF ( cType == "N" )
113: Return( StrZero( uData , 4 ) )114: ElseIF ( cType == "C" )
115: Return( StrZero( Val( uData ) , 4 ) ) 116: EndIF 117: 118: Function Last_Day( dDate ) 119: 120: Local nMonth 121: Local nYear 122: 123: IF ( ValType( dDate ) == "C" )
124: dDate := CToD( dDate ) 125: EndIF 126: 127: nMonth := ( Month( dDate ) + 1 ) 128: nYear := Year( dDate ) 129: IF ( nMonth > 12 ) 130: nMonth := 1 131: ++nYear 132: EndIF 133: 134: dDate := CToD( "01/" + Month2Str( nMonth ) + "/" + Year2Str( nYear ) )
135: dDate -= 1 136: 137: Return( Day( dDate ) ) 138: 139: Function YearSum( dDate , nYear ) 140: 141: Local nMonthAux := Month( dDate ) 142: Local nDayAux := Day( dDate ) 143: Local nYearAux := Year( dDate ) 144: 145: nYearAux += nYear146: dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
147: IF Empty( dDate )148: dDate := Ctod( Day2Str( 1 ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
149: nDayAux := Last_Day( dDate )150: dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
151: EndIF 152: 153: Return( dDate ) 154: 155: Function YearSub( dDate , nYear ) 156: 157: Local nMonthAux := Month( dDate ) 158: Local nDayAux := Day( dDate ) 159: Local nYearAux := Year( dDate ) 160: 161: nYearAux -= nYear162: dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
163: IF Empty( dDate )164: dDate := Ctod( Day2Str( 1 ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
165: nDayAux := Last_Day( dDate )166: dDate := Ctod( Day2Str( nDayAux ) + "/" + Month2Str( nMonthAux ) + "/" + Year2Str( nYearAux ) )
167: EndIF 168: 169: Return( dDate )Para testar, baixe a última versão do Harbour Nightly binary: exe 7z (win), obtenha o exemplo acima a partir de totvs-advpl-naldodj\harbour\samples\main.prg e compile
e execute, verás a saida diretamente no “console”
Funções de Manipulação de Hash: xHarbour e sua equivalência no Harbour
1: #xtranslate HASH([<x,...>]) => hb_HASH(<x>) 2: #xtranslate HHASKEY([<x,...>]) => hb_HHASKEY(<x>) 3: #xtranslate HGETPOS([<x,...>]) => hb_HPOS(<x>) 4: #xtranslate HGET([<x,...>]) => hb_HGET(<x>) 5: #xtranslate HSET([<x,...>]) => hb_HSET(<x>) 6: #xtranslate HDEL([<x,...>]) => hb_HDEL(<x>) 7: #xtranslate HGETKEYAT([<x,...>]) => hb_HKEYAT(<x>) 8: #xtranslate HGETVALUEAT([<x,...>]) => hb_HVALUEAT(<x>) 9: #xtranslate HSETVALUEAT([<x,...>]) => hb_HVALUEAT(<x>) 10: #xtranslate HGETPAIRAT([<x,...>]) => hb_HPAIRAT(<x>) 11: #xtranslate HDELAT([<x,...>]) => hb_HDELAT(<x>) 12: #xtranslate HGETKEYS([<x,...>]) => hb_HKEYS(<x>) 13: #xtranslate HGETVALUES([<x,...>]) => hb_HVALUES(<x>) 14: #xtranslate HFILL([<x,...>]) => hb_HFILL(<x>) 15: #xtranslate HCLONE([<x,...>]) => hb_HCLONE(<x>) 16: #xtranslate HCOPY([<x,...>]) => hb_HCOPY(<x>) 17: #xtranslate HMERGE([<x,...>]) => hb_HMERGE(<x>) 18: #xtranslate HEVAL([<x,...>]) => hb_HEVAL(<x>) 19: #xtranslate HSCAN([<x,...>]) => hb_HSCAN(<x>) 20: #xtranslate HSETCASEMATCH([<x,...>]) => hb_HSETCASEMATCH(<x>) 21: #xtranslate HGETCASEMATCH([<x,...>]) => hb_HCASEMATCH(<x>) 22: #xtranslate HSETAUTOADD([<x,...>]) => hb_HSETAUTOADD(<x>) 23: #xtranslate HGETAUTOADD([<x,...>]) => hb_HAUTOADD(<x>) 24: #xtranslate HALLOCATE([<x,...>]) => hb_HALLOCATE(<x>) 25: #xtranslate HDEFAULT([<x,...>]) => hb_HDEFAULT(<x>)[]s
иαldσ dj
Comentários
Postar um comentário