Управление текстовой информацией при помощи строк

Чтобы использовать текстовые данные для управления поведением диаграммы и для манипулирования текстом для создания выхода на естественном языке, используйте строки. Строковые данные доступны только в Stateflow® графики, которые используют C в качестве языка действий.

Пример строковых данных

В Stateflow string является частью текста, окруженной кавычками ("..." или '...'). Для примера этот график принимает строку данные как вход. На основе этого входов график создает соответствующий строковый выход.

Чтобы задать строковый символ, установите его Type поле равным string. Stateflow динамически выделяет пространство памяти для этого типа данных.

Также можно создать строковые данные с максимальным количеством символов. Чтобы задать символ строки с buffer size n символов, установите его Type поле на stringtype (n). Текст строки может быть короче буфера, но если он превышает buffer size, то текст в строке обрезается. Для образца, если символ output на предыдущем графике задано как stringtype(10), затем его значение в состоянии On обрезается до "All system". В зависимости от параметр конфигурации <reservedrangesplaceholder0> можно остановить симуляцию и диагностировать усечение строковых данных.

Проверка усечения строкОписание
errorСимуляция останавливается с ошибкой.
warningСтрока усечена. Симуляция продолжается с предупреждением.
noneСтрока усечена. Симуляция продолжается без ошибок или предупреждений.

Примечание

В отличие от C или C++, Stateflow интерпретирует escape-последовательности как буквальные символы. Для примера строка "\n" содержит два символа, обратную косую черту и n, и не символ новой строки.

Расчеты со строками

Для манипулирования строковыми данными в диаграмме Stateflow используйте операторы, перечисленные в этой таблице.

ОператорСинтаксисОписаниеПример
strcpy

strcpy(dest,src)

Альтернативный способ выполнения dest = src.

Назначьте строковые данные s1, s2, и s3.

strcpy(s1,'So long');
strcpy(s2,"Farewell");
strcpy(s3,s2);

dest = src

Присваивает строковые src на dest.

Назначьте строковые данные s4, s5, и s6.

s4 = 'Auf Wiedersehen';
s5 = "Adieu";
s6 = s4;
strcat

dest = strcat(s1,...,sN)

Конкатенирует строки s1,...,sN.

Конкатенация строк для формирования "Stateflow".

s1 = "State";
s2 = "flow";
dest = strcat(s1,s2);

substr

dest = substr(str,i,n)

Возвращает подстроку длины n начиная с i-й символ строкового str. Используйте нулевую индексацию.

Извлечение подстроки "Stateflow" из более длинной строки.

str = "Stateflow, rule the waves!";
dest = substr(str,0,9);

tostring

dest = tostring(X)

Преобразует числовые, логические или перечисленные данные в строку.

Преобразуйте числовое значение в строковое "1.2345".

dest = tostring(1.2345);

Преобразуйте логическое значение в строковое "true".

dest = tostring(1==1);

Преобразуйте перечисленное значение в строковое "RED".

dest = tostring(RED);

strcmp

tf = strcmp(s1,s2)

Сравнивает строки s1 и s2. Возвращает 0 если две строки идентичны. В противном случае возвращается ненулевое целое число.

  • Знак выходного значения зависит от лексикографического упорядоченного расположения входных строк s1 и s2.

  • Величина выходного значения зависит от компилятора, который вы используете. Это значение может отличаться в симуляции и сгенерированном коде.

Строки считаются идентичными, когда они имеют одинаковый размер и содержимое.

Этот оператор согласован с функцией библиотеки C strcmp или функцию C++ string.compare, в зависимости от компилятора, который вы выбираете для генерации кода. Оператор ведет себя по-другому, чем функция strcmp в MATLAB®.

Верните значение 0 (строки равны).

tf = strcmp("abc","abc");

Верните ненулевое значение (строки не равны).

tf = strcmp("abc","abcd");

s1 == s2

Альтернативный способ выполнения strcmp(s1,s2) == 0.

Верните значение true.

"abc" == "abc";

s1 != s2

Альтернативный способ выполнения strcmp(s1,s2) != 0.

Верните значение true.

"abc" != "abcd";

tf = strcmp(s1,s2,n)

Возвращает 0 если первый n символы в s1 и s2 идентичны.

Верните значение 0 (подстроки равны).

tf = strcmp("abc","abcd",3);

strlen

L = strlen(str)

Возвращает количество символов в строке str.

Верните значение 9.

L = strlen("Stateflow");

str2double

X = str2double(str)

Преобразует текст в строковые str к значению двойной точности.

str содержит текст, который представляет число. Текст, который представляет число, может содержать:

  • Цифры

  • Десятичная точка

  • Ведущий + или - знак

  • Система координат e предшествующий степени 10 масштабного коэффициента

Если str2double невозможно преобразовать текст в число, после чего возвращается NaN значение.

Верните значение -12.345.

X = str2double("-12.345");

Верните значение 123400.

X = str2double("1.234e5");

str2ascii

A = str2ascii(str,n)

Возвращает массив типов uint8 содержащие значения ASCII для первого n символы в str, где n является положительным целым числом. Использование переменных или выражений для n не поддерживается.

Возврат uint8 массивы направленности {72,101,108,108,111}.

A = str2ascii("Hello",5);

ascii2str

dest = ascii2str(A)

Преобразует значения ASCII в A массива типа uint8 в строку.

Возврат строкового "Hi!".

A[0] = 72;
A[1] = 105;
A[2] = 33;
dest = ascii2str(A);

Где использовать строки

Используйте строковые данные на этих уровнях иерархии Stateflow:

  • График

  • Субдиаграмма

  • Государство

Используйте строковые данные в качестве аргументов для:

  • Состояния активности

  • Условие и переходные действия

  • Графические функции

  • Simulink® функции

  • Функции таблицы истинности, которые используют C в качестве языка действий

Если у вас установлен Simulink Coder™, можно использовать строковые данные для симуляции и генерации кода.

См. также

| | | | | | | |

Похожие темы