Войти

Показать полную графическую версию : [решено] Сортировка сецкий ini файла при сохранении по алфавиту


eus_deus
30-11-2013, 20:07
Здравствуйте!
Имеется скрипт, который пишет данные в стандартный ini файл. Хотелось бы, чтобы при записи новые секции (да и старые, если в них вносятся изменения) писались не в конец файла, а сортировались по алфавиту, но единственное, что нарыл более менее подходящее - это _ArraySort(). Боюсь сильно портить функцию, она то рабочая...
Вид функции такой:
Func _savethemetofile()
Local $vData
$existsect = GUICtrlRead($vCombo1)
$sect = GUICtrlRead($vInput8)
$vkey1 = GUICtrlRead($vInput1)
If $vkey1 Then $vData &= "BkColor=" & $vkey1 & @LF
$vkey2 = GUICtrlRead($vInput2)
If $vkey2 Then $vData &= "IconBkColor=" & $vkey2 & @LF
$vkey3 = GUICtrlRead($vInput3)
If $vkey3 Then $vData &= "IconBkGrdColor=" & $vkey3 & @LF
$vkey4 = GUICtrlRead($vInput4)
If $vkey4 Then $vData &= "SelectBkColor=" & $vkey4 & @LF
$vkey5 = GUICtrlRead($vInput5)
If $vkey5 Then $vData &= "SelectRectColor=" & $vkey5 & @LF
$vkey6 = GUICtrlRead($vInput6)
If $vkey6 Then $vData &= "TextColor=" & $vkey6 & @LF
$vkey7 = GUICtrlRead($vInput7)
If $vkey7 Then $vData &= "SelectTextColor=" & $vkey7 & @LF
if GUICtrlRead($vRadio1) = $GUI_CHECKED then
If $sect='' then
MsgBox(262144+48, "Ошибка ", "Введите имя секции.")
Return
endif
if $vData='' then
MsgBox(262144+48, "Ошибка ", "Вы не ввели ни одного значения.")
Return
else
$vibor = MsgBox(262144+32+4,'Сохранение секции','Хотите сохранить секцию с выбранными параметрами? ')
If $vibor='6' Then
IniWriteSection($inifile, $sect, $vData)
MsgBox(262144 + 64, "Все удалось!", "Секция записана в файл " & $inifile)
Else
return
Endif
Endif
Else
if $existsect<>'' then
IniWriteSection($inifile, $existsect, $vData)
MsgBox(262144 + 64, "Все удалось!", "Вы сохранили отредактированную секцию в файл " & $inifile)
_clean_color()
endif
EndIf
EndFunc

AZJIO
30-11-2013, 23:48
eus_deus, меньшими затратами это можно сделать с помощью IniVirtual.au3 (http://azjio.ucoz.ru/publ/skripty_autoit3/funkcii/inivirtual_inivirtualspe/11-1-0-36) и конкретно функцией _IniVirtual_Initial (http://azjio.narod.ru/autoit3_docs/userfunctions/_IniVirtual_Initial.htm). Получилв ini-файл в массив (точнее массив массивов), сортировать по секциям (первая колонка), и сортировать вложенные массивы (хотя может не потребуется). Перед записью очистить/удалить ini-файл. С помощью _IniVirtual_Save (http://azjio.narod.ru/autoit3_docs/userfunctions/_IniVirtual_Save.htm) сохранить.

Iska
01-12-2013, 00:06
eus_deus, стандарт ini-файлов не предусматривает требования наличия сортировки ни в именах разделов, ни в именах параметров — они все равнозначны. Смысл в этом разве что для ориентировки внутри ini-файла при его ручной правке.

eus_deus
01-12-2013, 00:40
Iska, ладно, все равно , если так.




© OSzone.net 2001-2012