Просмотр полной версии : Строковые функции языка ST в MasterScada
Есть несколько вопросов по работе строковых функций:
1. Функция FIND(Str1, Str2) должна бы, по идее, возвращать значение 0, если Str2 не найдена в Str1. Не возвращает, или, можно сказать, возвращает неправильно. А если Str2 = '.' возвращает 1 всегда, где бы эта точка не находилась. Если искать ',' и запятая есть в Str1, возвращается правильный номер в строке. Но если запятую из строки убрать, то возвращается номер позиции где запятая была. Ноль возвращать не хочет.
2. Если на строковый вход скрипта ST вместо непустой строки подать пустую строку, то скрипт не обрабатывает её. Например, можно написать внутри скрипта функцию LEN(in_string), надеясь получить длину 0, но ничего подобного не произойдёт.
Опрос объектов периодический. Почему пустые строки не обрабатываются? Замеченные особенности действительно имеют место быть или это я неправильно использую строковые функции?
SCADAMaster
29.05.2019, 09:19
У нас все корректно. Попробуйте проверить на текущей Beta версии.
У меня стояла версия 3.9.0.2484. Скачал с сайта версию 3.10.0.8093 3.10(RT32ReleaseMax)_19_02_01_23_46. В ней эти функции работают корректно. Спасибо за подсказку. А это и есть Beta версия? Или Beta лежит где-то в другом месте?
Поиск подстроки всегда возвращает первое вхождение, при отсутствии указания позиции с какой начинать поиск.
Если речь про точки, запятые и повторяющиеся данные.
Мне так кажется...
И вы собственно 1 получаете, что что-то найдено, нет ?
з.ы. не знаток ST но обычно так, если реализация самого ST на языке другого уровня.
Должно вернуть bool = true если нашел, и еще в некую переменную указать номер позиции первого вхождения.
SCADAMaster
29.05.2019, 11:00
У меня стояла версия 3.9.0.2484. Скачал с сайта версию 3.10.0.8093 3.10(RT32ReleaseMax)_19_02_01_23_46. В ней эти функции работают корректно. Спасибо за подсказку. А это и есть Beta версия? Или Beta лежит где-то в другом месте?
Beta лежит там же.
Но если работает эта, то используйте ее
[QUOTE=melky;306530]Поиск подстроки всегда возвращает первое вхождение, при отсутствии указания позиции с какой начинать поиск.
Если речь про точки, запятые и повторяющиеся данные.
Мне так кажется...
И вы собственно 1 получаете, что что-то найдено, нет ?
В функции FIND на языке ST два аргумента: FIND(строка в которой ищем, строка которую надо найти). Негде ей указать с какой позиции начать поиск. В версии Скады 3.9 FIND(строка, '.') всегда возвращала 1, независимо от того, где в строке точка и есть ли она вообще. В версии 3.10 функция работает правильно. А если что-то не найдено в языке ST должно возвращаться 0.
Хм, че за странная функция на ST, а если у меня в строке 2 одинаковые записи, а мне нужна определенная ? или обработать одну, потом обработать следующую ?
Ага. Вот такая странная функция. Из описания: "FIND(STR1, STR2) означает: найти позицию в строке STR1, где впервые встречается подстрока STR2." А дальше, если надо найти повторения, именно как Вы говорите - отрезать кусок строки с найденным включением, повторить поиск в оставшемся обрезке строки, и т. д. В принципе, элементарных строковых функций ST вполне хватает для несложной обработки строк. А для особо причудливых извращений есть C#.
Я так понимаю, если ничего не нашла, FIND=0, если что-то нашла то FIND = число, начало позиции первого вхождения?
может у вас там точка всегда на первой позиции ? :)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot