Author Topic: Не могу победить строковые функции.  (Read 1938 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Здравствуйте.

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

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"

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

Как добиться корректной работы функции формирующей строку путём склеивания двух числовых переменных с вычитанием/сложением со строкой ?

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Не могу победить строковые функции.
« Reply #1 on: December 16, 2016, 02:58:20 PM »
И так как написал не работает ...
Обождите отвечать, сейчас всё проверю и спрошу =).

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не могу победить строковые функции.
« Reply #2 on: December 16, 2016, 03:03:26 PM »
Если использовать переменную $left_pos в условии, выполняются сразу несколько из них.

И как выглядят эти условия.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Не могу победить строковые функции.
« Reply #3 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

У меня сейчас голова взорвется.
Почему срабатывают два условия ?

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Не могу победить строковые функции.
« Reply #4 on: December 16, 2016, 03:12:25 PM »
Кажется начал догонять.
Он их считает, строки то ....
Он не как строку понимает - "6-2", а как число 4.
Значит и строка "7-3" = 4.

Как же быть то мне теперь ?
...
Использовать вместо дефиса другой разделитель.
...
В общем сам себе и ответил.
Спасибо =).

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не могу победить строковые функции.
« Reply #5 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

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Не могу победить строковые функции.
« Reply #6 on: December 16, 2016, 03:38:37 PM »
Можно также получать Хеш строки.
Спасибо, буду иметь в виду.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не могу победить строковые функции.
« Reply #7 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
« Last Edit: December 16, 2016, 03:55:21 PM by Vint »