|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Изменить значение параметра — Не INI файл! |
|
|
[решено] Изменить значение параметра — Не INI файл!
|
Ветеран Сообщения: 842 |
Профиль | Отправить PM | Цитировать
Синтаксис обычный: параметр = значение, номер строки не известен.
Текущее значение неизвестно, и даже может быть пустым. Например: position.width=1152 position.height=816 Здесь видимо можно обрубить по знаку равенства "=" через StringRegExp(), но я не знаю как... --- Я уже думал нашёл решение, просто переименовав файл, но проблемма оказалась в том, что файл вдобавок не имеет секций [] |
|
------- Отправлено: 00:06, 13-08-2010 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать semiono, ну добавь секцию руками, обработай как INI, потом снова удали секцию.
|
------- Отправлено: 00:25, 13-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Можешь набросать как примерно? Потому что я с записью и удалением секции "нагорожу забор"!
Лучше посмотреть как это адекватно зделать. Вот сам текст примерно такой # SciTE session file position.left=0 position.top=0 position.width=1152 position.height=816 position.maximize=1 mru.1.path=J:\[\Pebind\Alcohol\Patch\Script\Setup.au3 mru.2.path=H:\[\ENTRIES.au3 mru.3.path=C:\I\WinSxS\Process\New AutoIt v3 Script.au3 buffer.1.path=C:\I\WinSxS\Process\New AutoIt v3 Script.au3 buffer.1.position=46 buffer.1.current=1 |
------- Отправлено: 00:30, 13-08-2010 | #3 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать semiono,
Можно так попробовать: $sStringW = 'position.width=' $sStringH = 'position.height=' $hFile = FileOpen(@UserProfileDir & '\SciTE.session', 0) $sText = FileRead($hFile) FileClose($hFile) MsgBox(0, '', $sText) $sText = StringRegExpReplace($sText, $sStringW & '\d{3,4}', $sStringW & @DesktopWidth) $sText = StringRegExpReplace($sText, $sStringH & '\d{3,4}', $sStringH & @DesktopHeight) MsgBox(0, '', $sText) |
Последний раз редактировалось madmasles, 13-08-2010 в 00:59. Отправлено: 00:42, 13-08-2010 | #4 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать $sPath = @ScriptDir & '\SciTE.session'; Scite.Session file path' $sContent = '[Some Section]' & @CRLF & FileRead($sPath) ConsoleWrite($sContent & @CRLF) $hWrite = FileOpen($sPath, 2) FileWrite($hWrite, $sContent) FileClose($hWrite) IniWrite($sPath, 'Some Section', 'position.width', @DesktopWidth) IniWrite($sPath, 'Some Section', 'position.height', @DesktopHeight) $hRead = FileOpen($sPath, 0) FileReadLine($hRead) $sContent = FileRead($hRead) FileClose($hRead) $hWrite = FileOpen($sPath, 2) FileWrite($hWrite, $sContent) FileClose($sContent) |
|
------- Отправлено: 00:48, 13-08-2010 | #5 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать kaster, работает правильно как бы, но такое наблюдение, что снизу файл начинает зачищаться.
То-есть файл становиться всё меньше с каждым запуском снизу и даже начинает затирать сами строки position.width=1152 position.height=816... странно! madmasles, если начальные значения не соответствуют разрядности, то не работает. То-есть 1111 > 1152 нормально! Но 111 > не станет 1152 |
------- Отправлено: 00:59, 13-08-2010 | #6 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать semiono, не знаю. у меня ничего не зачищается. да и не должно по идее. возможно сам редактор привносит в этот файл изменения.
|
------- Отправлено: 01:08, 13-08-2010 | #7 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать semiono,
Как скрипт kaster`a, так и мой отрабатывает у меня как надо. Если Вы его запускаете из открытого окна SciTE, то он возвращает старые значения. Закройте окно SciTE и запустите скрипт правой кнопкой через Run Script. Цитата semiono:
|
|
Отправлено: 01:16, 13-08-2010 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Вот функция которую я когда то писал для обработки ключей в файлах *.properties:
#include <Array.au3> _FilePropertyWrite("File.properties", "Scripts", "MyScript.au3|SomeScript1.au3|SomeScript2.au3|SomeScript3.au3") $aProperty = _FilePropertyRead("File.properties", "Scripts", "", 1) _ArrayDisplay($aProperty) Func _FilePropertyRead($sFile, $sProperty, $sDefault = "", $iRetArr = 1) Local $aFileRead = StringSplit(StringStripCR(FileRead($sFile)), @LF) Local $sRet, $sPattern = '(?i)^\s*\Q' & $sProperty & '\E\s*=\s*' For $i = 1 To $aFileRead[0] If StringRegExp($aFileRead[$i], $sPattern) Then $aFileRead[$i] = StringRegExpReplace($aFileRead[$i], $sPattern, '') If StringRight($aFileRead[$i], 1) = "\" Then $aFileRead[$i] = StringTrimRight($aFileRead[$i], 1) EndIf $sRet &= StringStripWS($aFileRead[$i], 3) For $j = $i+1 To $aFileRead[0] If StringInStr($aFileRead[$j], "=") Then ExitLoop 2 ElseIf StringLeft(StringStripWS($aFileRead[$j], 1), 1) <> "#" Then If StringRight($aFileRead[$j], 1) = "\" Then $aFileRead[$j] = StringTrimRight($aFileRead[$j], 1) EndIf $sRet &= " " & StringStripWS($aFileRead[$j], 3) EndIf Next ExitLoop EndIf Next If $sRet == "" Then $sRet = $sDefault Else $sRet = StringStripWS($sRet, 3) EndIf If $iRetArr Then Return StringSplit($sRet, " ") EndIf Return $sRet EndFunc Func _FilePropertyWrite($sFile, $sProperty, $sValue, $iInsInLine = -1, $iPropsPerLine = 5) Local $aFileRead = StringSplit(StringStripCR(FileRead($sFile)), @LF) Local $sPropPattern = '(?i)^\s*(\Q' & $sProperty & '\E)\s*=\s*.*' Local $sKeyPattern = '^\s*([^=]+\s*=\s*|#)' Local $hFile, $sFileContent, $aValue, $sLine, $iPropFound = 0 $aValue = StringSplit(StringReplace($sValue, '\', ''), '|') $sValue = '' For $i = 1 To $aValue[0] $sValue &= $aValue[$i] If $i < $aValue[0] Then If $i = 1 Or Mod($i - 1, $iPropsPerLine) = 0 Then $sValue &= ' \' & @CRLF & @TAB Else $sValue &= ' ' EndIf EndIf Next For $i = 1 To $aFileRead[0] $sLine = $aFileRead[$i] If StringRegExp($aFileRead[$i], $sPropPattern) Then If $iInsInLine = -1 Then $iPropFound = 1 $sLine = StringRegExpReplace($aFileRead[$i], $sPropPattern, '\1=' & StringReplace($sValue, '\', '\\')) EndIf For $j = $i+1 To $aFileRead[0] If StringRegExp($aFileRead[$j], $sKeyPattern) Or $i >= $aFileRead[0] Then ExitLoop EndIf $i += 1 Next If $iInsInLine <> -1 Then ContinueLoop EndIf EndIf $sFileContent &= $sLine If $i < $aFileRead[0] Then $sFileContent &= @CRLF EndIf Next If $iInsInLine <> -1 Then $aFileRead = StringSplit(StringStripCR($sFileContent), @LF) $sFileContent = '' For $i = 1 To $aFileRead[0] If $i = $iInsInLine Then $iPropFound = 1 $sFileContent &= $sProperty & "=" & $sValue & @CRLF & $aFileRead[$i] Else $sFileContent &= $aFileRead[$i] EndIf If $i < $aFileRead[0] Then $sFileContent &= @CRLF EndIf Next EndIf If Not $iPropFound Then If $sFileContent <> '' And StringRight($sFileContent, 2) <> @CRLF Then $sFileContent &= @CRLF EndIf $sFileContent &= $sProperty & "=" & $sValue EndIf $hFile = FileOpen($sFile, 2) FileWrite($hFile, $sFileContent) Return FileClose($hFile) EndFunc |
------- Последний раз редактировалось Creat0R, 13-08-2010 в 12:26. Причина: Добавление функций для чтения + её поправка Отправлено: 10:28, 13-08-2010 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Добавил в пример выше функцию для записи, также поддерживает запись многострочного значения.
|
------- Отправлено: 11:08, 13-08-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - Значение секторов в Desktop.ini | konstantinych | Microsoft Windows 2000/XP | 3 | 27-01-2010 23:18 | |
Разное - Изменить значение Mouse1 на Mouse3 | Dmitriusss | Microsoft Windows 2000/XP | 6 | 03-04-2009 14:43 | |
Интерфейс - [решено] Как изменить значение в реестре | DeMoN23 | Microsoft Windows 2000/XP | 2 | 24-02-2009 13:52 | |
Как в Omni Page распознавать файл переданый в качестве параметра командной строки | madmax24 | Программное обеспечение Windows | 8 | 07-06-2007 19:59 | |
Значение параметра в реестре WinME | Guest | Microsoft Windows 95/98/Me (архив) | 3 | 07-10-2004 15:26 |
|