Что нового

[Массивы] Запись данных массива в ini-файл

Free_Soft

Новичок
Сообщения
4
Репутация
0
Есть код:
AutoIt Код (с парсированием BB-кодов):
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
Global $IniFile = @ScriptDir & '\Settings.ini'

_IniRead()
_IniSet()

Func _IniSet()
If $OnlineKMS0 = '' Then $OnlineKMS0 = ':'
Local $adress0 = StringSplit($OnlineKMS0, ':')
If $OnlineKMS1 = '' Then $OnlineKMS1 = ':'
Local $adress1 = StringSplit($OnlineKMS1, ':')
If $OnlineKMS2 = '' Then $OnlineKMS2 = ':'
Local $adress2 = StringSplit($OnlineKMS2, ':')
If $OnlineKMS3 = '' Then $OnlineKMS3 = ':'
Local $adress3 = StringSplit($OnlineKMS3, ':')
If $OnlineKMS4 = '' Then $OnlineKMS4 = ':'
Local $adress4 = StringSplit($OnlineKMS4, ':')
If $OnlineKMS5 = '' Then $OnlineKMS5 = ':'
Local $adress5 = StringSplit($OnlineKMS5, ':')
If $OnlineKMS6 = '' Then $OnlineKMS6 = ':'
Local $adress6 = StringSplit($OnlineKMS6, ':')
If $OnlineKMS7 = '' Then $OnlineKMS7 = ':'
Local $adress7 = StringSplit($OnlineKMS7, ':')
If $OnlineKMS8 = '' Then $OnlineKMS8 = ':'
Local $adress8 = StringSplit($OnlineKMS8, ':')
If $OnlineKMS9 = '' Then $OnlineKMS9 = ':'
Local $adress9 = StringSplit($OnlineKMS9, ':')
Local $aData[11][2] = [[10],[$adress0[1], $adress0[2]],[$adress1[1], $adress1[2]],[$adress2[1], $adress2[2]], _
[$adress3[1], $adress3[2]],[$adress4[1], $adress4[2]],[$adress5[1], $adress5[2]],[$adress6[1], $adress6[2]], _
[$adress7[1], $adress7[2]],[$adress8[1], $adress8[2]],[$adress9[1], $adress9[2]]], _
$aInput[$aData[0][0] + 1][2] = [[$aData[0][0]]], $hGUIS, $nCloseIniSet, $nTab60, $nTestOnline, $nMsg, $sIP_Name, $sIP, $iPort, $sResult

$hGUIS = GUICreate('Settings', 300, 375)
$nCloseIniSet = GUICtrlCreateButton('Close', 192, 335, 100, 25)
GUICtrlCreateTab(17, 50, 266, 260)
$nTab60 = GUICtrlCreateTabItem('OnlineKMS')
For $i = 1 To $aInput[0][0]
GUICtrlCreateLabel('Server#' & ($i - 1) & ':', 30, 82 + ($i - 1) * 20, 55, 17)
GUICtrlCreateLabel('Port:', 194, 82 + ($i - 1) * 20, 26, 17)
$aInput[$i][0] = GUICtrlCreateInput($aData[$i][0], 84, 78 + ($i - 1) * 20, 104, 18)
$aInput[$i][1] = GUICtrlCreateInput($aData[$i][1], 222, 78 + ($i - 1) * 20, 45, 18, $ES_NUMBER)
Next
$aData = 0
$nTestOnline = GUICtrlCreateLabel('TEST SERVERS', 105, 285, 110, 17)
GUICtrlSetFont(-1, 9, 400)
GUICtrlSetCursor(-1, 0)
GUICtrlSetColor(-1, 0x0000ff)

GUICtrlCreateTabItem('')
GUICtrlCreateGroup('', 7, 30, 284, 295)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $nCloseIniSet
Exit
Case $nTestOnline
GUICtrlSetColor($nTestOnline, 0x666666)
GUICtrlSetData($nTestOnline, ' testing... ')
GUICtrlSetCursor($nTestOnline, 15)
GUICtrlSetState($nTestOnline, $GUI_DISABLE)
GUICtrlSetState($nCloseIniSet, $GUI_DISABLE)
TCPStartup()
For $i = 1 To $aInput[0][0]
$sIP_Name = GUICtrlRead($aInput[$i][0])
If Not $sIP_Name Then ContinueLoop
$sIP = TCPNameToIP($sIP_Name)
If Not StringRegExp($sIP, '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$') Then ContinueLoop
$iPort = Number(GUICtrlRead($aInput[$i][1]))
If Not $iPort Then ContinueLoop
$sResult = _TCPQuery($sIP, $iPort)
If $sResult == 'Up' Then
GUICtrlSetColor($aInput[$i][0], 0x009933)
GUICtrlSetColor($aInput[$i][1], 0x009933)
Else
GUICtrlSetColor($aInput[$i][0], 0xCC0000)
GUICtrlSetColor($aInput[$i][1], 0xCC0000)
EndIf
Next
TCPShutdown()
GUICtrlSetCursor($nTestOnline, 2)
GUICtrlSetData($nTestOnline, ' Test complete. ')
GUICtrlSetState($nTestOnline, $GUI_ENABLE)
GUICtrlSetState($nCloseIniSet, $GUI_ENABLE)
EndSwitch
WEnd
EndFunc ;==>_IniSet

Func _TCPQuery($s_IP, $i_Port)
TCPConnect($s_IP, $i_Port)
If @error Then
Return 'Down'
Else
Return 'Up'
EndIf
EndFunc ;==>_TCPQuery


Func _IniRead()
If Not FileExists($IniFile) Then
_IniCreate()
EndIf
Global $OnlineKMS0 = IniRead($IniFile, 'OnlineKMS', 'Server#0', ':')
Global $OnlineKMS1 = IniRead($IniFile, 'OnlineKMS', 'Server#1', ':')
Global $OnlineKMS2 = IniRead($IniFile, 'OnlineKMS', 'Server#2', ':')
Global $OnlineKMS3 = IniRead($IniFile, 'OnlineKMS', 'Server#3', ':')
Global $OnlineKMS4 = IniRead($IniFile, 'OnlineKMS', 'Server#4', ':')
Global $OnlineKMS5 = IniRead($IniFile, 'OnlineKMS', 'Server#5', ':')
Global $OnlineKMS6 = IniRead($IniFile, 'OnlineKMS', 'Server#6', ':')
Global $OnlineKMS7 = IniRead($IniFile, 'OnlineKMS', 'Server#7', ':')
Global $OnlineKMS8 = IniRead($IniFile, 'OnlineKMS', 'Server#8', ':')
Global $OnlineKMS9 = IniRead($IniFile, 'OnlineKMS', 'Server#9', ':')
EndFunc ;==>_IniRead

Func _IniCreate()
Local $IniFileWrite = FileOpen($IniFile, 2)
FileWrite($IniFileWrite, '[OnlineKMS]' & @CRLF & _
'Server#0=85.12.229.182:1688' & @CRLF & _
'Server#1=121.18.82.147:1688' & @CRLF & _
'Server#2=kmsr2.dynalias.com:1688' & @CRLF & _
'Server#3=yuna.no-ip.info:1688' & @CRLF & _
'Server#4=vault-tec.no-ip.org:1688' & @CRLF & _
'Server#5=91.149.135.121:1688' & @CRLF & _
'Server#6=194.0.116.18:1688' & @CRLF & _
'Server#7=' & @CRLF & _
'Server#8=' & @CRLF & _
'Server#9=')
FileClose($IniFileWrite)
EndFunc ;==>_IniCreate

Алгоритм такой: происходит чтение адресов серверов и портов из файла настроек; эти данные появляются в соответствующих полях GUI. Функция тестирования - проверка каждой пары сервер:порт на предмет отклика.
Вопрос: как сделать возможность записи данных сервер:порт обратно в ini-файл в случае заполнения пустых полей или редактирования вручную непосредственно в полях ввода уже существующих записей? Можно сделать запись либо по нажатию кнопки, либо при изменении данных в полях ввода - как удобнее.
Заранее признателен за помощь
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Free_Soft,
*Click*

Сделайте кнопку $nSave и ей запускайте (без проверки на валидность пары сервер-порт).
Код:
;...
Case $GUI_EVENT_CLOSE, $nCloseIniSet
	For $i = 1 To $aInput[0][0] ;при выходе
		$sValue = ''
		$sIP_Name = GUICtrlRead($aInput[$i][0])
		$sPort = GUICtrlRead($aInput[$i][1])
		If $sIP_Name And $sPort Then $sValue = $sIP_Name & ':' & $sPort
		IniWrite($IniFile, 'OnlineKMS', 'Server#' & $i - 1, $sValue)
	Next
	Exit
Case $nSave
	For $i = 1 To $aInput[0][0]
		$sValue = ''
		$sIP_Name = GUICtrlRead($aInput[$i][0])
		$sPort = GUICtrlRead($aInput[$i][1])
		If $sIP_Name And $sPort Then $sValue = $sIP_Name & ':' & $sPort
		IniWrite($IniFile, 'OnlineKMS', 'Server#' & $i - 1, $sValue)
	Next
	$sValue = ''
	$sIP_Name = ''
	$sPort = ''
;...
 
Автор
F

Free_Soft

Новичок
Сообщения
4
Репутация
0
Спасибо, все работает как надо. Тема закрыта
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
{CodeWarn.SModer}
 
Верх