IMStrelcov
CTPEJIbLLOB
- Сообщения
- 253
- Репутация
- 64
Несколько функций для поддержки вашими приложениями работы с файлом конфигурации
Код:
#cs------------------------------------------
функции работают с файлом конфигурации содержащий следующую структуру:
Ключ1 1
;коментарий
Ключ2 Значение1
Ключ3 Значение1 "Значени2" Значение3
Ключ4
так же перед и после ключа и после значения могут быть множественные пробелы и табы которые игнорируются если они не вкавычках.
так же если ключ есть но нет значения, то такому ключу будет присвоено значение в единицу.
#ce------------------------------------------
#cs
Данная функция разбивает команды написаные в одну строку на многострочный конфиг.
Т.Е. командная трока:
-Ключ1 /Ключ2=Значение1 Ключ3="Значение1 ""Значени2"" Значение3"
после обработки примет вид:
Ключ1 1
Ключ2 Значение1
Ключ3 Значение1 "Значени2" Значение3
где первое слово в строке это параметр, а последующие слова в этой же строке, значение этого параметра.
знаки - и / в начале имени ключа и лишние пробелы в начале и конце каждого ключа и его значения удаляются, кроме пробелов которые в кавычках.
#ce
Global $sString = ' - BaLib= "1uu" 0 1Hndl="2 ""8"" rt ""p[o"" t" /2Hndl = "3" qwe = rty -r qwe2 =rty '
$sCfg = Cfg_OfCmd_($sString)
ConsoleWrite($sCfg&@CRLF)
#cs------------------------------------------
почистить от пустых строк и комментариев
----------------------------------------------
$_sCfg = строка с параметрами
----------------------------------------------
$_iOpt = может быть комбинация из след. значений
1 - удалить пустые строки
2 - удалить комментарии
----------------------------------------------
возращает новую строку с параметрами
#ce------------------------------------------
Func Cfg_Clean_($_sCfg, $_iOpt = 1)
If BitAND($_iOpt, 1) Then
$_sCfg = StringRegExpReplace($_sCfg, '(?m)^[\s]+', '');удалить пустые строки
EndIf
If BitAND($_iOpt, 2) Then
$_sCfg = StringRegExpReplace($_sCfg, '(?m)^;.*\s\s', '');удалить коментарии
EndIf
Return $_sCfg
EndFunc
#cs------------------------------------------
сохранить параметры в файл
----------------------------------------------
$_sCfg = строка с параметрами
----------------------------------------------
$_sFile = файл в который сохранить
#ce------------------------------------------
Func Cfg_Save_($_sCfg, $_sFile)
Local $_hFile = FileOpen($_sFile, 2 +8)
FileWrite($_hFile, $_sCfg)
FileClose($_hFile)
EndFunc
#cs------------------------------------------
открыть файл с параметрами
----------------------------------------------
$_sFile = файл с параметрами
----------------------------------------------
возвращает новую строку с параметрами
#ce------------------------------------------
Func Cfg_Open_($_sFile)
Local $_sCfg = FileRead($_sFile)& @CRLF
$_sCfg = StringRegExpReplace($_sCfg, '^\s*|\s*$', '')& @CRLF;удалить в начале и конце текста пустые строки
$_sCfg = StringRegExpReplace($_sCfg, '(?m)(^[^;\s][^\s]*\h*$)', '$1 1');добавить значение пустым параметрам
Return $_sCfg
EndFunc
#cs------------------------------------------
добавить перезаписать или удалить параметр
----------------------------------------------
$_sCfg = строка с параметрами
----------------------------------------------
$_sKey = параметр
----------------------------------------------
$_sValue = значение, если оставить ноль, то параметр удалится
#ce------------------------------------------
Func Cfg_Write_(ByRef $_sCfg, $_sKey, $_sValue = 0)
$_sKey = StringRegExpReplace($_sKey, '(?m)\s', '')
If Not $_sValue Then
$_sCfg = StringRegExpReplace($_sCfg, '(?mi)^\h*'&$_sKey&'\h*(.*)?\s+', '')
Else
$_sCfg = StringRegExpReplace($_sCfg, '(?mi)^(\h*'&$_sKey&'\h*)(.*)?\s', '$1'& $_sValue)
If Not @extended Then
$_sCfg &= $_sKey& ' '& $_sValue& @CRLF
EndIf
EndIf
EndFunc
#cs------------------------------------------
получить значение параметра
----------------------------------------------
$_sCfg = строка с параметрами
----------------------------------------------
$_sKey = параметр
----------------------------------------------
возращает значение параметра или ноль если параметра нет
#ce------------------------------------------
Func Cfg_Read_(ByRef $_sCfg, $_sKey)
$_sKey = StringRegExpReplace($_sKey, '(?m)\s', '')
$_sKey = StringRegExp($_sCfg, '(?mi)^\h*'& $_sKey&'\h*(.*)\h*$', 1)
$_sKey = @extended ? $_sKey[0] : 0
Return $_sKey
EndFunc
#cs------------------------------------------
конвертирует командную строку в параметры
----------------------------------------------
$_sCmd = командная строка
----------------------------------------------
возвращает новую строку с параметрами
#ce------------------------------------------
Func Cfg_OfCmd_($_sCmd)
$_sCmd = StringRegExpReplace($_sCmd, '\h*(?:[-/])?\h*([^\h"=]*)\h*(?:(?:=)\h*(?:(?:(?:")((""|[^"]*)*)(?:"))|([^"\h]*)))?\h*', '$1 $2$4'& @CRLF)
$_sCmd = StringRegExpReplace($_sCmd, '""', '"');заменить двойные кавычки
$_sCmd = StringRegExpReplace($_sCmd, '(?m)^([^\s]+)\h$', '$1 1');добавить значение пустым параметрам
$_sCmd = StringRegExpReplace($_sCmd, '(?m)^([\s]+)', '');удалить пустые строки
Return $_sCmd
EndFunc