Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Сортировка сецкий ini файла при сохранении по алфавиту (http://forum.oszone.net/showthread.php?t=273111)

eus_deus 30-11-2013 20:07 2264502

Сортировка сецкий ini файла при сохранении по алфавиту
 
Здравствуйте!
Имеется скрипт, который пишет данные в стандартный 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 2264619

eus_deus, меньшими затратами это можно сделать с помощью IniVirtual.au3 и конкретно функцией _IniVirtual_Initial. Получилв ini-файл в массив (точнее массив массивов), сортировать по секциям (первая колонка), и сортировать вложенные массивы (хотя может не потребуется). Перед записью очистить/удалить ini-файл. С помощью _IniVirtual_Save сохранить.

Iska 01-12-2013 00:06 2264631

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

eus_deus 01-12-2013 00:40 2264648

Iska, ладно, все равно , если так.


Время: 23:46.

Время: 23:46.
© OSzone.net 2001-