Что нового

Хранение значений переменных вo внешнем файле

Chang

Новичок
Сообщения
45
Репутация
0
Приветствую. Подскажите пожалуйста, как вынести значение переменных в сторонний файл а-ля config.ini и подружить его со скриптом ? Каждый раз редактировать в исходном коде не очень удобно, а если файл скомпилировать, то это фактически задать ему жесткие настройки. Хочется добавить больше универсальности.

Благодарю.
 

All2khoff

Продвинутый
Сообщения
352
Репутация
65
собственно вы сами ответили на свой вопрос)), сам постоянно пользуюсь ini.
Код:
IniRead
IniWrite

Разделяем по секциям, и храним пароли, адреса, строки, имена что угодно что можно выразить как имя=параметр
 
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
Спасибо большое. Но как бы это банально не звучало, гляжу в книгу - вижу фигу. С файлами ini до этого не сталкивался, если не сложно - подскажите пожалуйста.

У меня есть 2 переменные, которые хочу вынести:
Код:
$WaitingTime = 7200000 ; задержка
$Backup = "SysDump3817.exe" ; Исполняемый файл содержит версию сборки!


Первая используется для тестирования и тонкой настройки, вторая для актуализации рабочей версии бекапера

P.S. Бекапер есть возможность запустить через командную строку с ключами (пример: SysDump3817-console.exe -Srv 192.168.0.10 -P 3128 -Delay 0), но как ключи добавить в переменную так же не нашел в справке
 

All2khoff

Продвинутый
Сообщения
352
Репутация
65
Например как то так
File.ini
[sleep] Time=7200000 [Backup] Version=SysDump3817.exe
 
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
Вот теперь окончательно запутался. Как в данном случае модернизировать следующие строчки:
Код:
If _Timer_GetIdleTime() > $WaitingTime Then ; если время простоя рабочей станции более 2х часов

...

Run("SysDump3817-console.exe -Srv 192.168.0.10 -P 3128 -Delay 0",'',@SW_MAXIMIZE)

Не до конца понимаю вот эту строчку из справки:
Код:
$sRead = IniRead($sPath_ini, "Section", "Key", "Значение по умолчанию")

Судя по логике, я объявляю переменную $sRead и присваиваю переменной значение из файла ini ... Но что такое "Значение по умолчанию" ?

Протестировать сейчас увы не могу, но по логике в моем случае должно получиться следующее
Код:
$sPath_ini = @ScriptDir & "\File.ini"
$sRead1 = IniRead($sPath_ini, "sleep", "Time", "Значение по умолчанию")
$sRead2 = IniRead($sPath_ini, "Backup", "Version", "Значение по умолчанию")
...
If _Timer_GetIdleTime() > $sRead1 Then ; если время простоя рабочей станции более 2х часов
...
Run($sRead2,'',@SW_MAXIMIZE)
Оно ?
 

All2khoff

Продвинутый
Сообщения
352
Репутация
65
Значение по умолчанию, это например если файл не найден или данного параметра или секции в файле нет.
Типа если нет инструкций значит считаем что "так".
Этот параметр не обязателен и его можно не писать.
Сегодня я уже не за компьютером, с кодом оперативно не помогу, если другие участники форума не подскажут, постараюсь завтра поподробней рассказать.
 
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
Этот параметр не обязателен и его можно не писать.
Код:
$sPath_ini = @ScriptDir & "\File.ini" ; файл настроек
$sRead1 = IniRead($sPath_ini, "sleep", "Time") ; настройка таймаута
$sRead2 = IniRead($sPath_ini, "Backup", "Version") ; настройка файла для запуска
???

постараюсь завтра поподробней рассказать
Спасибо большое, буду ждать. А пока постараюсь сам поиграть с возможными вариантами
Сообщение автоматически объединено:

Со всем разобрался, пока работает как часы )))

Glass4217, спасибо большое за помощь в разработке :good:
 
Последнее редактирование:

---Zak---

Скриптер
Сообщения
455
Репутация
120
К сожалению последний параметр "default" в функции IniRead обязателен. Он отвечает за то, что если в *.INI файле будет отсутствовать key - "Имя параметра" - то функция вернет как раз последний параметр.
PS: Ошибка вылетит в том случае, если в файле *.INI будет отсутствовать key - "Имя параметра".


Код:
$sPath_ini = @ScriptDir & "\File.ini"
$WaitingTime = IniRead($sPath_ini, "sleep", "Time", 7200000)
$Backup = IniRead($sPath_ini, "Backup", "Version", "SysDump3817.exe")
...
If _Timer_GetIdleTime() > Int($WaitingTime) Then ; если время простоя рабочей станции более 2х часов
...
Run($Backup & " -Srv 192.168.0.10 -P 3128 -Delay 0",'',@SW_MAXIMIZE)

[sleep] Time=7200000 [Backup] Version=SysDump3817.exe
При условии, что key в файле *.ini существует - значение будет браться от туда. Если значения нет... будет браться 4 параметр функции IniRead
 
Последнее редактирование:
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
Спасибо за разъяснение. Я конечно сделал по топорному, оставив дефолт просто пробелом )))

За ключики отдельное спасибо. Буду тестировать
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Chang
Если Вы оставите пустым (пробелом) последний параметр, то в дальнейшем код (условия и т.п.) будут выглядеть примерно следующим видом:
Код:
...
If _Timer_GetIdleTime() > " " Then ; если время простоя рабочей станции более 2х часов
...
Run(" " & " -Srv 192.168.0.10 -P 3128 -Delay 0",'',@SW_MAXIMIZE)

Т.е. сразу же посыпаются не приятности. Можете оставить поля пустыми, или еще как-нибудь обозначить их и в последующем проверить что в них. Если там будет пусто, то выполнять завершение программы или опять же перезаписать файл с необходимыми параметрами.
 
Последнее редактирование:
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
И снова здравствуйте. Столкнулся со следующей проблемой. Есть условие:

Код:
$Debug = IniRead($sPath_ini, "Debug1", "DevTest1", 0)

If $Debug == 1 Then
    If ProcessExists("SysDump3817.exe") Then
     ...
    EndIf
Else
EndIf

При установке значения переменной $Debug непосредственно в коде скрипта все работает, как часы. Но если значение указываю в файле ini, то мой дебагер никак не реагирует.

Значение по умолчанию тестировал в кавычках и без, результат один и тот же. Где я напортачил ?

Благодарю
Сообщение автоматически объединено:

Все еще в поисках решения. Отрицательный результат конечно тоже результат, но хочется, чтобы работало как задумано, с учетом задаваемых настроек через ini
 
Последнее редактирование:

---Zak---

Скриптер
Сообщения
455
Репутация
120
Что вы ведет ? Ну только ini нужен свой... соответственно.
Код:
$sPath_ini = @ScriptDir & "\File.ini"
$Debug = IniRead($sPath_ini, "Debug1", "DevTest1", 0)

If $Debug == 1 Then
   MsgBox(0, 'Debug', '$Debug == ' & $Debug)
Else
   MsgBox(0, 'Else ???', 'You can show content INI-files')
EndIf
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
При установке значения переменной $Debug непосредственно в коде скрипта все работает, как часы. Но если значение указываю в файле ini, то мой дебагер никак не реагирует.
Не совсем понимаю, как записано у вас в ini и что это значение значит в скрипте (путь или что-то другое), но попробуйте использовать Execute, FileExists, ShellExecute, типа:
Код:
ShellExecute(Execute("программа.exe"))
;или
FileExists(Execute("программа.exe"))
 
Последнее редактирование:
Автор
C

Chang

Новичок
Сообщения
45
Репутация
0
Что вы ведет ? Ну только ini нужен свой... соответственно.
Выводит "You can show content INI-files" вне зависимости от указанного значения в DevTest1

Не совсем понимаю, как записано у вас в ini и что это значение значит в скрипте
В ини все тоже самое, что и указано в настройках:
Код:
[Debug1]
DevTest1=1
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Chang
Странно... я скопировал Ваш ini + Ваш код - соответственно поставил в свой - у меня все отлично. Проверьте путь к файлу и/или название файла - возможно не от туда читает ?
Файл ini точно находится в одной папке со скриптом...

Я думаю каждый был бы готов оказать непосильную помощь Вам, но тут можно только гадать...
Вот к примеру - с условием - существует ли на самом деле этот файл:
Код:
$sPath_ini = @ScriptDir & "\File.ini"

Local $iFileExists = FileExists($sPath_ini)
; Display a message of whether the file exists or not.
If $iFileExists Then
   MsgBox(0, "", "The file exists." & @CRLF & "FileExist returned: " & $iFileExists)
Else
   MsgBox(0, "", "The file doesn't exist." & @CRLF & "FileExist returned: " & $iFileExists)
EndIf

$Debug = IniRead($sPath_ini, "Debug1", "DevTest1", 0)

If $Debug == 1 Then
   MsgBox(0, 'Debug', '$Debug == ' & $Debug)
Else
   MsgBox(0, 'Else ???', 'You can show content INI-files')
EndIf
 

TorNeo

Новичок
Сообщения
21
Репутация
0
Run($Backup & " -Srv 192.168.0.10 -P 3128 -Delay 0",'',@SW_MAXIMIZE)
Я дико извиняюсь, что лезу в чужую тему, но подскажите пожалуйста, как ключи вынести так же в переменную ?

Сделал так:
Код:
Run($Game & $Param,'',@SW_MAXIMIZE)

Проверка синтаксиса ошибок не выдала, но при запуске вижу /ErrorStdOut
Программа стартует 1 раз, а параметры подставляются бесконечно (в цикле)
 

TorNeo

Новичок
Сообщения
21
Репутация
0
InnI, спасибо. А по поводу циклической подстановки параметров что скажите ? Как это вылечить ? В какую сторону копать ?
 
Верх