Что нового

Сортировка ключей в секциях ini

Пост номер 2 был отмечен как лучший ответ.

Xabib2302

Новичок
Сообщения
55
Репутация
0
Доброе время суток. Необходимо отсортировать ключи в каждой секции
 

Alecsis

Знающий
Сообщения
16
Репутация
9
Привет!
Что-то в этом роде, с минимальной «защитой от дурака»:
Код:
#pragma compile(Console, True)
Opt('MustDeclareVars', True)
#include <Array.au3>
Local _
  $sIniFile,    _ ; имя .ini-файла
  $aIniSNames,  _ ; список имён секций
  $aIniKeys       ; массив имён/значений ключей секции

; имя .ini строим по правилу <имя скипта без расширения>.ini
;
$sIniFile   = StringLeft(@ScriptName, StringLen(@ScriptName)-4) & '.ini'
;
$aIniSNames = IniReadSectionNames($sIniFile)
If @error Then
  ConsoleWrite('*** Error *** failed on ' & $sIniFile & @CR)
  Exit 362
EndIf
;
Local $i
For $i = 1 To $aIniSNames[0]  ; в цикле поимённо перелопачиваем найденные секции
  $aIniKeys = IniReadSection($sIniFile, $aIniSNames[$i])
  If @error Then
    ConsoleWrite('*** Error *** read failed on section ' & $aIniSNames[$i] & @CR)
    ContinueLoop  ; что-то не так с секцией, пробуем следующую
  EndIf
  _ArrayDisplay($aIniKeys, 'Before sort ' & $aIniSNames[$i])
  _ArraySort($aIniKeys, 0, 1)
  If @error Then
    ConsoleWrite('*** Error *** sort failed on section ' & $aIniSNames[$i] & @CR)
    ContinueLoop  ; что-то не так с ключами в секции, пробуем следующую
  EndIf
  _ArrayDisplay($aIniKeys, 'After sort ' & $aIniSNames[$i])
  IniWriteSection($sIniFile, $aIniSNames[$i], $aIniKeys)
Next
;
ConsoleWrite('Ok!' & @CR)
Exit 0

P.S. В архиве исходник + пример реального .ini-файла
 

Вложения

Верх