Что нового

Скрипт постоянно ищет "потеряные" значения в ini-файле, как узнать из-за какой?

agikon

Знающий
Сообщения
789
Репутация
16
Заметил такую закономерность, например есть скрипт в котором обьявляется глобальная переменная которая отвечает за считывание параметра с ini-файла, но вот если что-то идёт не так, например где-то что-то не правильно прописано в смысле синтаксиса, что при старте скрипт не считывает искомый праметр с ini-файла и тогда всё время скрипт обращается,т.е. ищет в ini-файле нужный параметр и этим загружает виндовс.

так вот как выявить какой именно парметр в ini-файле ищет скрипт?
есть какая-то метода?
подскажите что можете пожалуйста.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
agikon,
Пример приведите и скрипта, и ини-файла, иначе, ИМХО, этой теме место в разделе Общение.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
madmasles
я то уже выловил причину.
но дело в том что если в ini-файле многовато значений то это получпется сложная задача.

вот например первая строчка указана а вторая нет, тогда скрипт постоянно будет искать в ini-файле.вот именно в такой последовательности, то есть case указан а глобал нет.
Код:
;Global  $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

;---
Case $1Radio
	IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))


но дело в том что это всё понятно, меня интересует есть ли методика выявления таких ini-ошибок?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
agikon [?]
вот например в таких двух строчках
ИМХО, это неправильные строчки, надо как-то так:
Код:
;Global $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')
Global $iState1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

$1Radio = GUICtrlCreateRadio('Text', 10, 20, 100, 20)
If $iState1Radio == '1' Then GUICtrlSetState(-1, $GUI_CHECKED)
;---
Case $1Radio
	IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
madmasles
я конечно по своему малознанию сначала пишу а потом думаю, прощу прощения.

НЕТ.
дело не совсем в строчках!

уточняю.
дело в том что если case указан, а глобал не указан то постоянно будет искать в ini-файле.
вот если так сделать то будет искать постоянно в ini-файле, хотя и ошибку при компиляции не выдаёт.
Код:
;Global  $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

;---
Case $1Radio
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
вот так будет всё ok
Код:
Global  $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

$1Radio1 = GUICtrlCreateCheckbox("задача1", 20, 20, 100, 20)
GUICtrlSetState(-1, $1Radio)

;--- остальной код скрипта 
Case $1Radio
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))


а вот так будет постоянно искать в ini-файле
Код:
;Global  $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

$1Radio1 = GUICtrlCreateCheckbox("задача1", 20, 20, 100, 20)
GUICtrlSetState(-1, $1Radio)

;--- остальной код скрипта 
Case $1Radio
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))


вот и получается проблематично найти где не соответствие, то есть при таком раскладе надо или глобал искать дописывать, или закомментировать case, чтобы его вообще не было.

проблема сама проста, а вот как её выловить? если например в скрипте много строк то может быть очень сложно.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
Код:
Case $1Radio
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))


Объясните это Вам для чего. Зачем Вам обрабатывать значение полученное из INI?
Может нужно так?
Код:
Case $1Radio1
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio1))


P.S. Переменные нужно обозначать НОРМАЛЬНО
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
OffTopic:
Medic84 [?]
Переменные нужно обозначать НОРМАЛЬНО
Это правильно, ИМХО.
Я, в начале знакомства с AutoIt тоже называл переменные как придется и покороче (лень было писать) и казалось, что все нормально, но... пока в скрипте 30 строк и 5 переменных, то да, все нормально, а дальше - беда. Теперь я не ленюсь и пусть имя переменной будет длинным, но для меня понятным. Например:
Код:
Global $nRadioDelYes, $nRadioDelNo, $nButtonExit, $fShowToolTip; и т.д.
;...
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
отписываюсь!

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

смотрим, например имеем 100 case

Код:
case  1
case 2
case 3
case ...

case 100

берем их все коментируем
Код:
#cs
case  1
case 2
case 3
case ...

case 100
#ce


а потом по одной включаем в код.
Код:
case  1
#cs
case 2
case 3
case ...

case 100
#ce


и после каждой case берём компилируем и смотрим как скрипт обращается к ini-файлу, и так на каком то этапе появится сбойная case.
вот к такому способу выявления ошибки я пришел, а всё потому что благо что без case скрипт компилируется и запускается.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
agikon
Просто ошибок не нужно делать с переменными.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Medic84
ошибок и изначально не было.
я же говорю бывют случаи когда комментируешь глобал, а case где-то там остаётся, и тогда появляются проблемы, хотя компилируется и работает скрипт нормально.

тут в чём и прикол что скрипт работает абсолютно нормально, но н апроцентов 5-20 сильнее грузит процессор. и без спец программки по мониторингу файловой системы я бы и сам не обратил на это внимание.

просто я посмотрел что мой скрипт постоянно лезет к ini-файлу вот и задумался к чему бы это, а так скрипт работает аюсолютно нормально, потому что ошибок как таковых то и нет.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 575
Репутация
335
Потому что у Вас не объявлена переменная $1Radio(как у Вас без этого работает остальной код - непонятно.
Отсюда в цикле начинает ПОСТОЯННО выполняться тот Case связанный с ним
И я уже написал - что у Вас не правильно написан код - не то Вы обрабатываете.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Medic84

да всё обьявлено, этот код я по памяти вообще написал, в скрипте всё нормально обьявлено.

речь про то что если забыть убрать case то на внешне скрпта это никак не повлиякет, кроме частому обращению к ini-файлу
 

running-frag

why me?
Сообщения
441
Репутация
60
agikon [?]
я же говорю бывют случаи когда комментируешь глобал, а case где-то там остаётся, и тогда появляются проблемы, хотя компилируется и работает скрипт нормально.
чего то в голову сразу пришёл вот такой код
Код:
Global $globalData[2] 			; [0] - bool, [1] - data
	...
$globalData[0] = True			; включаем переменную
$globalData[1] = "string"		; значение
	...
If $globalData[0] Then			; проверка выключена ли переменная
	...
	ConsoleWrite ($globalData[1])
	...
EndIf
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
agikon [?]
а вот так будет постоянно искать в ini-файле
Код:
;Global  $1Radio = IniRead($sIniFile, 'set', 'arr1', '1')

$1Radio1 = GUICtrlCreateCheckbox("задача1", 20, 20, 100, 20)
GUICtrlSetState(-1, $1Radio)

;--- остальной код скрипта
Case $1Radio ;<-Переменная объявлена несколько раз
    IniWrite($sIniFile, 'set', 'arr1', GUICtrlRead($1Radio))
Значит переменная $1Radio объявлена несколько раз, иначе скрипт вылетел бы с ошибкой "Error: Variable used without being declared."
Разберитесь с переменными и проблемы с ini-файлом отпадут сами собой.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
да.
все переменные обьявлены в самом начале скрипта.

ну тут дело не в этом.
а дело в case.
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
running-frag
Полезная идея объявлять переменные как массив где
Код:
[0] - off\on
[1] - значение
Возьму на вооружение :smile:
 
Верх