sproxy
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору FullHD 15:07 29-03-2009 Цитата: Добавьте пожалуста еще функцию , чтобы можно найти и удалить строчку из текствого документа \cfg\config.cfg . Допусти строчку удалить строчку director_no_human_zombies "0" Можете ее зделать также удобна как и запись чтобы выглядило примерно так _Cfg_Delete('director_no_human_zombies "0"') , просто мне не одну строчку надо удалить . | Код: #region: - Include ;~ #include <Array.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #endregion #region: - Option Opt('GUIOnEventMode', 1) Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion #region: - Global Global $sCfgPath = @ScriptDir & '\cfg\config.cfg' If NOT FileExists($sCfgPath) Then DirCreate(@ScriptDir & '\cfg') EndIf Global $sCfgText = FileRead($sCfgPath) If StringLeft($sCfgText, 2) <> @CRLF Then $sCfgText = @CRLF & $sCfgText If StringRight($sCfgText, 2) <> @CRLF Then $sCfgText &= @CRLF $sCfgText = StringRegExpReplace($sCfgText, '\r\n\s*\r\n', @CRLF) Global $sCfgName $sCfgName = _Cfg_Read('name', 'FullHD') _Cfg_Write('sv_lan', '0') _Cfg_Del('director_no_human_zombies') _Cfg_File_Write() Global $hWinMain, $hName #endregion #region: - Главное окно $hWinMain = GUICreate('Test', 400, 400, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit') ;~ Имя игрока GUICtrlCreateLabel('Имя игрока:', 10, 23, 80, 18) GUICtrlSetFont(-1, 9.5, 700) $hName = GUICtrlCreateInput($sCfgName, 10, 23+18, 150, 20) GUICtrlCreateButton('Сохранить', 10+150+2, 23+18-1, 70, 22) GUICtrlSetOnEvent(-1, '_Name_Write') #endregion #region: - После создания всех GUI GUISetState(@SW_SHOW, $hWinMain) ;~ ==> Отладка, можно удалить---------------------------------- ;~ Local $sCfgTextShow ;~ $sCfgTextShow = StringReplace($sCfgText, @CR, ' [cr] ') ;~ $sCfgTextShow = StringReplace($sCfgTextShow, @LF, ' [lf] ') ;~ MsgBox(0, '$sCfgTextShow', $sCfgTextShow) ;~ <== Отладка, можно удалить---------------------------------- #endregion #region: - Sleep, Exit While 1 Sleep(10) WEnd Func _Pro_Exit() Exit EndFunc #endregion Func _Cfg_Read($sWhatRead, $sDefault, $iYesFileWrite=0) Local $vSerch $vSerch = StringRegExp($sCfgText, '\s*\r\n(?i)\s*' & $sWhatRead & '\s+(.*)(?U)\r\n\s*', 1) If @Error == 1 Then $vSerch = $sDefault $sCfgText &= $sWhatRead & ' "' & $vSerch & '"' & @CRLF If $iYesFileWrite == 1 Then _Cfg_File_Write() EndIf If IsArray($vSerch) Then $vSerch = StringReplace($vSerch[0], '"', '') EndIf If StringStripWS($vSerch, 8) == '' Then $vSerch = $sDefault $sCfgText = StringRegExpReplace($sCfgText, '\s*\r\n(?i)\s*' & $sWhatRead & '\s+(.*)(?U)\r\n\s*', @CRLF & $sWhatRead & ' "' & $vSerch & '"' & @CRLF) If $iYesFileWrite == 1 Then _Cfg_File_Write() EndIf Return $vSerch EndFunc Func _Cfg_Write($sWhatWrite, $sValue, $iYesFileWrite=0) _Cfg_Del($sWhatWrite) $sCfgText = StringRegExpReplace($sCfgText, '\s*\r\n(?i)\s*' & $sWhatWrite & '\s+(.*)(?U)\r\n\s*', @CRLF & $sWhatWrite & ' "' & $sValue & '"' & @CRLF) If @Extended == 0 Then $sCfgText &= $sWhatWrite & ' "' & $sValue & '"' & @CRLF If $iYesFileWrite == 1 Then _Cfg_File_Write() EndFunc Func _Cfg_Del($sWhatDel, $iYesFileWrite=0) While 1 $sCfgText = StringRegExpReplace($sCfgText, '\s*\r\n(?i)\s*' & $sWhatDel & '.*(?U)\r\n\s*', @CRLF) If @Extended == 0 Then ExitLoop WEnd If $iYesFileWrite == 1 Then _Cfg_File_Write() EndFunc Func _Cfg_File_Write() Local $hFile, $sCfgTextToWrite $sCfgTextToWrite = $sCfgText If StringLeft($sCfgTextToWrite, 2) == @CRLF Then $sCfgTextToWrite = StringTrimLeft($sCfgTextToWrite, 2) If StringRight($sCfgTextToWrite, 2) == @CRLF Then $sCfgTextToWrite = StringTrimRight($sCfgTextToWrite, 2) $hFile = FileOpen($sCfgPath, 2) FileWrite($hFile, $sCfgTextToWrite) FileClose($hFile) EndFunc Func _Name_Write() $sCfgName = GUICtrlRead($hName) If StringStripWS($sCfgName, 8) == '' Then MsgBox(32, 'Ошибка', 'Пожалуйста, введите имя игрока') $sCfgName = '' GUICtrlSetData($hName, $sCfgName) Return EndIf _Cfg_Write('name', $sCfgName, 1) EndFunc | в функции доваленно: Код: If $iYesFileWrite == 1 Then _Cfg_File_Write() | Это поможет уменьшить колличество обращения (на перезапись) к файлу. т.к. функции: _Cfg_Write, _Cfg_Del, а так же _Cfg_Read (если переменная не найденна) вносят изминения в cfg файл, то лучше пользоваться вот так: Код: _Cfg_Write('sv_lan', '0') _Cfg_Del('director_no_human_zombies') _Cfg_File_Write() | первая и вторая функции внесут изминения в текст cfg файла, но только 3-ая функция запишит все изминения непосредственно в cfg файл. Если требуется прочиать/записать/удалить данные и тут же перезаписать cfg файл, можно вот так: Код: _Cfg_Write('sv_lan', '0', 1) _Cfg_Del('director_no_human_zombies', 1) | +измененны рег.вырожения, перезапишите все функции. | Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 15:35 29-03-2009 | Исправлено: sproxy, 16:22 29-03-2009 |
|