Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Изменить значение параметра — Не INI файл!

Ответить
Настройки темы
[решено] Изменить значение параметра — Не INI файл!

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Изменения
Автор: semiono
Дата: 13-08-2010
Синтаксис обычный: параметр = значение, номер строки не известен.
Текущее значение неизвестно, и даже может быть пустым.
Например:
position.width=1152
position.height=816

Здесь видимо можно обрубить по знаку равенства "=" через StringRegExp(), но я не знаю как...

---
Я уже думал нашёл решение, просто переименовав файл, но проблемма оказалась в том,
что файл вдобавок не имеет секций []

-------
Полезное сообщение


Отправлено: 00:06, 13-08-2010

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


semiono, ну добавь секцию руками, обработай как INI, потом снова удали секцию.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:25, 13-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить 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
А как можно секцию [test] вписать в начало файла или перед нужной строкой?

-------
Полезное сообщение


Отправлено: 00:30, 13-08-2010 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить 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


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить 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)

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:48, 13-08-2010 | #5


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


kaster, работает правильно как бы, но такое наблюдение, что снизу файл начинает зачищаться.
То-есть файл становиться всё меньше с каждым запуском снизу и даже начинает затирать сами строки position.width=1152 position.height=816... странно!

madmasles, если начальные значения не соответствуют разрядности, то не работает.
То-есть 1111 > 1152 нормально! Но 111 > не станет 1152

-------
Полезное сообщение


Отправлено: 00:59, 13-08-2010 | #6


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


semiono, не знаю. у меня ничего не зачищается. да и не должно по идее. возможно сам редактор привносит в этот файл изменения.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:08, 13-08-2010 | #7


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


semiono,
Как скрипт kaster`a, так и мой отрабатывает у меня как надо. Если Вы его запускаете из открытого окна SciTE, то он возвращает старые значения. Закройте окно SciTE и запустите скрипт правой кнопкой через Run Script.
Цитата semiono:
если начальные значения не соответствуют разрядности »
'\d{3,4}' значит любые 3 или 4 цифры подряд (от 000 до 9999). Можно для надежности поменять на '\d{1,4}' (0 - 9999).
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:16, 13-08-2010 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить 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
работает также с многострочными значениями (разделённые слешем «\»).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 13-08-2010 в 12:26. Причина: Добавление функций для чтения + её поправка

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:28, 13-08-2010 | #9


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Добавил в пример выше функцию для записи, также поддерживает запись многострочного значения.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 11:08, 13-08-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Изменить значение параметра — Не INI файл!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Значение секторов в 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




 
Переход