This is topic Странности с типом STRING in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
PROGRAM VAR_OUTPUT ARG_000 : INT; END_VAR VAR VAR_000 : STRING; END_VAR
VAR_000 = "ABCD"; if (VAR_000 == "ABCD") then ARG_000 = 100; end_if;
END_PROGRAM
Почему программа не попадает внутрь блока IF?
Posted by AUGUST (Участник № / Member № 2699) on :
В догонку:
В таком виде работает (операцию == поменял на >=): VAR_000 = "ABCD"; if (VAR_000 >= "ABCD") then ARG_000 = 100; end_if;
И в таком: VAR_000 = "AB"; if (VAR_000 >= "ABCD") then ARG_000 = 100; end_if;
И даже в таком: VAR_000 = ""; if (VAR_000 >= "ABCD") then ARG_000 = 100; end_if;
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
## Операторы сравнения строковых переменных работают некорректно. Решения по этому вопросу будут приняты в следующем релизе.
Posted by Grigorovskih (Участник № / Member № 1915) on :
Здравствуйте Господа!
При использовании массива со строковыми элементами обнаружились неполадки уже на стадии работы в отладчике! Нам необходимо было использовать массив строковых переменных, но даже уже только при его задании программа не запускалась, при пошаговой отладке доходили до момента формирования такого массива, после чего отладчик перескакивал в начало не сформировав массив и не выполнив следующие строки кода выполняемые ниже. Скопировали пример с одномерными массивами из хелпа и он показал такой же сбой.
Проверьте пожалуйста в чём дело!
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Ошибка происходит при задании начальных значений. Это будет исправляться. Если просто описать массив с пустыми ячейками, то все работает корректно.
Posted by Grigorovskih (Участник № / Member № 1915) on :
Не только на стадии задания начальных значений! Если "просто описать массив" а потом его заполнять, то опять же проявляются ошибки. В релизе 6.06 это исправлено?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Ошибок при заполнении ошибок у нас не было в релизе 6.05.1. Пришлите, пожалуйста, примерчик, когда появляются ошибки при записи данных в пустой массив.
Posted by Grigorovskih (Участник № / Member № 1915) on :
Отправил, смотрите...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Аналогичный проект с массивом из 5 строк работает. Из 6 уже нет. Будем разбираться.
Posted by Grigorovskih (Участник № / Member № 1915) on :
Хорошо!
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
VAR CH: array [9] of USINT:=1,1,0,1,1,1,0,1,0,1,0; end_var if CH_err then for i=0 to 8 do if CH[i] then GVAR_000[i]='c'; else GVAR_000[i]='d'; end_if; end_for; ARG_001 = GVAR_000[0]+GVAR_000[1]+GVAR_000[2]+GVAR_000[3]+GVAR_000[4]+GVAR_000[5]+GVAR_000[6]+GVAR_000[7]+GVAR_001[8]; end_if; if CH_err then for i=0 to 8 do if CH[i] then GVAR_001[i]='a'; else GVAR_001[i]='b'; end_if; end_for; ARG_001 = GVAR_001[0]+GVAR_001[1]+GVAR_001[2]+GVAR_001[3]+GVAR_001[4]+GVAR_001[5]+GVAR_001[6]+GVAR_001[7]+GVAR_001[8]; end_if;
Вот такая программка работает. Возможно дело было в преобразовании типов.
Posted by drooha (Участник № / Member № 3306) on :
PROGRAM VAR_OUTPUT ARG_000 : INT; END_VAR VAR VAR_000 : STRING; END_VAR
VAR_000 = "ABCD"; if (VAR_000 == "ABCD") then ARG_000 = 100; end_if;
END_PROGRAM В релизе 6.06 так и не работает, когда же исправите?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Сравнение строк не работает и скорее всего не будет работать.