Возможно не совсем правильно назвал темку.
В общем, есть ли такая функция, в которую можно записывать/считывать данные по группе/ключу? То есть примерно как в ини файле. Придумываю группу,ключ и значение, вызываю функцию в которую ввожу эти три "слова". В качестве "носителя информации" используется какой-нибудь массив или переменная. Затем вызываю эту же функцию, или "парную"(противоположную) ей, ввожу группу и ключ, и получаю значение ключа.
Пока придумалось нечто "самопальное" ;D. Хотелось бы знать, есть ли грамотные функции
Реализация такая:
В общем, есть ли такая функция, в которую можно записывать/считывать данные по группе/ключу? То есть примерно как в ини файле. Придумываю группу,ключ и значение, вызываю функцию в которую ввожу эти три "слова". В качестве "носителя информации" используется какой-нибудь массив или переменная. Затем вызываю эту же функцию, или "парную"(противоположную) ей, ввожу группу и ключ, и получаю значение ключа.
Пока придумалось нечто "самопальное" ;D. Хотелось бы знать, есть ли грамотные функции

Код:
Func HashSimulator($opt,Byref $arruse,$groupp,$key,$x)
Local $ret,$len,$bufer,$i,$per,$hexg,$hexk,$hash,$index,$igroupp,$ikey,$prov,$red
If $arruse[130000]="" Then
$arruse[130000]=130001
EndIf
$ret=0
$per=$groupp
$len=StringLen($per)
$bufer=0
For $i=1 To $len
$bufer= $bufer+Dec(StringMid(StringToBinary(StringMid($per, $i, 1), 3),3,4))
Next
$bufer=hex($bufer,8)
$bufer=StringMid($bufer, 7, 2)
$hexg=$bufer
$per=$key
$len=StringLen($per)
$bufer=0
For $i=1 To $len
$bufer= $bufer+Dec(StringMid(StringToBinary(StringMid($per, $i, 1), 3),3,4))
Next
$bufer=hex($bufer,8)
$bufer=StringMid($bufer, 7, 2)
$hexk=$bufer
$hash=dec($hexg&$hexk)
If $opt="w" Then
If $arruse[$hash*2-1]="" Then
$arruse[$hash*2-1]=1
$arruse[$hash*2]=$arruse[130000]
$arruse[130000]=$arruse[130000]+4
$arruse[$arruse[$hash*2]]=$x
$arruse[$arruse[$hash*2]+1]=$groupp
$arruse[$arruse[$hash*2]+2]=$key
$arruse[$arruse[$hash*2]+3]=0
Else
$index=$arruse[$hash*2]
$prov=0
For $i=1 To $arruse[$hash*2-1]
$igroupp=$arruse[$index+1]
$ikey=$arruse[$index+2]
If $igroupp=$groupp And $ikey=$key Then
$arruse[$index]=$x
$prov=1
exitloop
Else
If $i<$arruse[$hash*2-1] Then
$index=$arruse[$index+3]
EndIf
EndIf
Next
If $prov=0 Then
$arruse[$index+3]=$arruse[130000]
$index=$arruse[130000]
$arruse[130000]=$arruse[130000]+4
$arruse[$hash*2-1]=$arruse[$hash*2-1]+1
$arruse[$index]=$x
$arruse[$index+1]=$groupp
$arruse[$index+2]=$key
$arruse[$index+3]=0
$red=$arruse[130000]
ReDim $arruse[$red+100]
EndIf
EndIf
EndIf
If $opt="r" Then
If $arruse[$hash*2-1]<>"" Then
$index=$arruse[$hash*2]
For $i=1 To $arruse[$hash*2-1]
$igroupp=$arruse[$index+1]
$ikey=$arruse[$index+2]
If $igroupp=$groupp And $ikey=$key Then
$ret=$arruse[$index]
exitloop
Else
If $i<$arruse[$hash*2-1] Then
$index=$arruse[$index+3]
EndIf
EndIf
Next
EndIf
EndIf
Return $ret
EndFunc
Реализация такая:
Код:
Global $arruse[200000]
HashSimulator("w",$arruse,"группа1","ключ1","значение1")
$x=HashSimulator("r",$arruse,"группа1","ключ1","")