Что нового

[Ошибки] функция If, не проверяет условия

Trans

Знающий
Сообщения
257
Репутация
6
Ребят, подскажите из-за чего при проверки данных через If постоянно выдаётся отрицательный вариант
Код:
$min_lvl=_ArrayMin($SearchMobLvL, 1)
$max_lvl=_ArrayMax($SearchMobLvL, 1)
If $min_lvl>=GUICtrlRead($GUIMobMinLvL) And $max_lvl<=GUICtrlRead($GUIMobMaxLvL) Then
ConsoleWrite('min_lvl='&$min_lvl&' max_lvl='&$max_lvl&' gui_min='&GUICtrlRead($GUIMobMinLvL)&' gui_max='&GUICtrlRead($GUIMobMaxLvL))
EndIf


Хотя если сделать так:

Код:
$min_lvl=20
$max_lvl=20
If $min_lvl>=7 And $max_lvl <=24 Then
ConsoleWrite('min_lvl='&$min_lvl&' max_lvl='&$max_lvl)
EndIf

то всё прекрасно работает

А вот если убрать If
Код:
$min_lvl=_ArrayMin($SearchMobLvL, 1)
$max_lvl=_ArrayMax($SearchMobLvL, 1)
;If $min_lvl>=GUICtrlRead($GUIMobMinLvL) And $max_lvl<=GUICtrlRead($GUIMobMaxLvL) Then
ConsoleWrite('min_lvl='&$min_lvl&' max_lvl='&$max_lvl&' gui_min='&GUICtrlRead($GUIMobMinLvL)&' gui_max='&GUICtrlRead($GUIMobMaxLvL))
;EndIf

Выдаёт нужный ответ, т.е. переменные $min_lvl и $max_lvl имеют своё значение и GUICtrlRead($GUIMobMinLvL) и GUICtrlRead($GUIMobMaxLvL) имеют своё значение (в данном случае это 7 и 24)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Trans, значит условие не найдено.
можно весь скрипт?
откуда считываются данные?
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
joiner
Код:
$LogTable = _IETableGetCollection($oIE, 0)
	$LogTableArray = _IETableWriteToArray($LogTable)
			        $SearchMobLvL=StringRegExp($LogTableArray[0][5],'(?i)\D+(\d{1,2})', 3)
				$min_lvl=_ArrayMin($SearchMobLvL, 1)
				$max_lvl=_ArrayMax($SearchMobLvL, 1)
If $min_lvl>=GUICtrlRead($GUIMobMinLvL) And $max_lvl<=GUICtrlRead($GUIMobMaxLvL) Then
ConsoleWrite('min_lvl='&$min_lvl&' max_lvl='&$max_lvl&' gui_min='&GUICtrlRead($GUIMobMinLvL)&' gui_max='&GUICtrlRead($GUIMobMaxLvL))
EndIf

Примерно такой код
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Trans
GUICtrlRead возвращает строку, если и в массиве строка то сравнивая две строки 7 и 24 то 7 больше чем 2 в лексикографическом порядке.
Во втором варианте сравнение происходит с реальными числами, соответственно их соседи по сравнению преобразуются в числа по правилу функции Number(). И конечно в этом случае 24 больше 7.

Читай раздел "Операторы".
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Trans,
А так?
Код:
;...
If Number($min_lvl) >= Number(GUICtrlRead($GUIMobMinLvL)) And Number($max_lvl) <= Number(GUICtrlRead($GUIMobMaxLvL)) Then
	ConsoleWrite('min_lvl=' & $min_lvl & ' max_lvl=' & $max_lvl & ' gui_min=' & GUICtrlRead($GUIMobMinLvL) & ' gui_max=' & GUICtrlRead($GUIMobMaxLvL))
EndIf
;...
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
только как-то странно, до этого подходил вариант GUICtrlRead ( controlID [, advanced] )...
Всем спасибо!
 
Верх