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: Else
52: 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 += nYear
146: 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 -= nYear
162: 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