Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $s_INI = @ScriptDir & "\Sample.ini"
- $Res = _IniVirtualSPE_RenameSection($s_INI, 'Section2', '-- New Section --', 1)
- Func _IniVirtualSPE_RenameSection($s_INI, $sSection, $sNewName, $flag = 0)
- $s_INI_Text = FileRead($s_INI)
- If Not _SectionExists($s_INI_Text, $sSection) Then Return SetError(1, 0, 0) ; если старая секция не существует, то завершение функции
- If $flag Then ; Если перезаписывать, то
- _IniVirtualSPE_Delete($s_INI_Text, $sNewName) ; удаляем новую секцию на случай если она существует
- $sSection = StringRegExpReplace($sSection, '[][{}()*+?.\\^$|=<>#]', '\\$0')
- $s_INI_Text = StringRegExpReplace($s_INI_Text, '(?m)^(\h*\[\h*)(' & $sSection & ')(\h*\]\h*\r?)$', '\1' & $sNewName & '\3') ; переименование секции
- Else
- If _SectionExists($s_INI_Text, $sNewName) Then
- Return SetError(2, 0, 0)
- Else
- $sSection = StringRegExpReplace($sSection, '[][{}()*+?.\\^$|=<>#]', '\\$0')
- $s_INI_Text = StringRegExpReplace($s_INI_Text, '(?m)^(\h*\[\h*)(' & $sSection & ')(\h*\]\h*\r?)$', '\1' & $sNewName & '\3') ; переименование секции
- EndIf
- EndIf
- Local $hFile = FileOpen($s_INI, 2)
- FileWrite($hFile, $s_INI_Text)
- FileClose($hFile)
- Return 1
- EndFunc ;==>_IniVirtualSPE_RenameSection
- Func _SectionExists($s_INI_Text, $sSection)
- $sSection = StringRegExpReplace($sSection, '[][{}()*+?.\\^$|=<>#]', '\\$0')
- Return StringRegExp($s_INI_Text, '(?s)(?:\r\n|\A)\h*\[\h*' & $sSection & '\h*\]\h*(?=\r\n|\s*\z)') ; извлечение контента секции
- EndFunc ;==>_SectionExists
- Func _IniVirtualSPE_Delete(ByRef $s_INI_Text, $sSection, $sKey = Default)
- If $sKey = Default Then
- $sSection = StringRegExpReplace($sSection, '[][{}()*+?.\\^$|=<>#]', '\\$0')
- $s_INI_Text = StringRegExpReplace($s_INI_Text, '(?s)(?:\r\n|\A)(\h*\[\h*' & $sSection & '\h*\]\h*(?:\r\n\s*[^\[\s].*?|))(?=\r\n\h*\[|\s*\z)', '') ; удаление секции
- If @error Then
- Return SetError(0, 1, 1)
- Else
- Return SetError(0, @extended, 1)
- EndIf
- Else
- Local $aSection = StringRegExp($s_ini_Text, '(?s)(?:\r\n|\A)\h*\[\h*' & StringRegExpReplace($sSection, '[][{}()*+?.\\^$|=<>#]', '\\$0') & '\h*\]\h*(\r\n\s*[^\[\s].*?\h*)(\s*\[\h*.*?\h*\]|\s*\z)', 2) ; извлечение контента секции
- If @error Then Return SetError(0, 1, 1)
- Local $iEndSection = @extended - StringLen($aSection[2]) - 1 ; конец секции
- Local $aKey = StringRegExp($aSection[1], '(?s)(\r\n\h*' & StringRegExpReplace($sKey, '[][{}()*+?.\\^$|=<>#]', '\\$0') & '\h*=\h*.*?\h*)(\s*\r\n|\s*\z)', 2) ; извлечение параметра
- If @error Then Return SetError(0, 2, 1)
- Local $iStart = @extended - StringLen($aKey[1]) - StringLen($aKey[2]) - 1 + $iEndSection - StringLen($aSection[1]) ; начало секции + начало параметра
- $s_INI_Text = StringLeft($s_INI_Text, $iStart) & StringTrimLeft($s_INI_Text, $iStart + StringLen($aKey[1]))
- Return 1
- EndIf
- EndFunc ;==>_IniVirtualSPE_Delete
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement