Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: putman on December 16, 2016, 02:50:25 PM

Title: Не могу победить строковые функции.
Post by: putman on December 16, 2016, 02:50:25 PM
Здравствуйте.

У меня некорректно сравнивается строка сформированная из числовых переменных:

Code: [Select]
$left_pos = STRCONCAT ($x_pos-1,"-",$y_pos)

Число до дефиса вычисляется путём вычитания единицы из переменной.
Если выполнить:

Code: [Select]
LOGWRITE ($left_pos)

, отобразит корректно, т.е. 6-2.
Если использовать переменную $left_pos в условии, выполняются сразу несколько из них.

Если для проверки делаю так:

Code: [Select]
$left_pos = "6-2"

, условие работает корректно.

Как добиться корректной работы функции формирующей строку путём склеивания двух числовых переменных с вычитанием/сложением со строкой ?
Title: Re: Не могу победить строковые функции.
Post by: putman on December 16, 2016, 02:58:20 PM
И так как написал не работает ...
Обождите отвечать, сейчас всё проверю и спрошу =).
Title: Re: Не могу победить строковые функции.
Post by: Oraven on December 16, 2016, 03:03:26 PM
Если использовать переменную $left_pos в условии, выполняются сразу несколько из них.

И как выглядят эти условия.
Title: Re: Не могу победить строковые функции.
Post by: putman on December 16, 2016, 03:09:59 PM
Вот, запустите это:

Code: [Select]
LOGCLEAR

$left_pos = "6-4"
$right_pos = "7-3"
$up_pos = "6-2"
$dn_pos = "6-1"

$real_pos = "6-2"

IF ($real_pos = $up_pos)
LOGWRITE ("Up")
END_IF

IF ($real_pos = $dn_pos)
LOGWRITE ("Down")
END_IF

IF ($real_pos = $left_pos)
LOGWRITE ("Left")
END_IF

IF ($real_pos = $right_pos)
LOGWRITE ("Right")
END_IF

halt

У меня сейчас голова взорвется.
Почему срабатывают два условия ?
Title: Re: Не могу победить строковые функции.
Post by: putman on December 16, 2016, 03:12:25 PM
Кажется начал догонять.
Он их считает, строки то ....
Он не как строку понимает - "6-2", а как число 4.
Значит и строка "7-3" = 4.

Как же быть то мне теперь ?
...
Использовать вместо дефиса другой разделитель.
...
В общем сам себе и ответил.
Спасибо =).
Title: Re: Не могу победить строковые функции.
Post by: Oraven on December 16, 2016, 03:35:20 PM
Можно также получать Хеш строки

Code: (clickermann) [Select]
LOGCLEAR

$left_pos = "6-4"
$right_pos = "7-3"
$up_pos = "6-2"
$dn_pos = "6-1"

$real_pos = "6-2"

IF (STRMD5($real_pos) = STRMD5($up_pos))
   LOGWRITE ("Up")
END_IF
                     
IF (STRMD5($real_pos) = STRMD5($dn_pos))
   LOGWRITE ("Down")
END_IF

IF (STRMD5($real_pos) = STRMD5($left_pos))
   LOGWRITE ("Left")
END_IF

IF (STRMD5($real_pos) = STRMD5($right_pos))
   LOGWRITE ("Right")
END_IF

halt
Title: Re: Не могу победить строковые функции.
Post by: putman on December 16, 2016, 03:38:37 PM
Можно также получать Хеш строки.
Спасибо, буду иметь в виду.
Title: Re: Не могу победить строковые функции.
Post by: Vint on December 16, 2016, 03:46:46 PM
Эту ошибку я давно нашёл и описывал.
Вычисление строки в условиях IF. В других функциях где были проблемы поправили, а в IF сломалось.
Точнее в IF сломалось на версии где были изменены логические выражения, когда они стали вычисляться True False из разных переменных и строк...
Там вот всплыла старая ошибка которая здесь не проявлялась.

P.S. Нашёл. Вот после этих изменений
http://crapware.aidf.org/forum/index.php?topic=356.msg4960#msg4960
Здесь пытался решить
http://crapware.aidf.org/forum/index.php?topic=356.msg5147#msg5147