From 1d782fd0d72949aa722b8f68f3b19867f40ca741 Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 6 May 2022 11:59:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=98=D0=94=20=D0=B2=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=8F=D1=85=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B8=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20=D0=B8?= =?UTF-8?q?=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D1=81=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=20*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/classes/IoTScenario.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index 3cafc036..d19a0d27 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -185,7 +185,7 @@ public: if (!lhs->isDecimal && !rhs->isDecimal) { switch (Op) { case tok_equal: - val.valD = lhs->valS == rhs->valS; + val.valD = compStr(lhs->valS, rhs->valS); break; default: @@ -196,6 +196,17 @@ public: } return nullptr; } + + bool compStr(String str1, String str2){ + if (str1.length() != str2.length()) return false; + for (int i = 0; i < str1.length(); i++) { + if (str1[i] == '*' || str2[i] == '*') continue; //считаем, что если есть подстановочная звезда, то символы равны + if (str1[i] != str2[i]) return false; + } + + return true;//str1 == str2; + } + }; /// CallExprAST - Класс узла выражения для вызова команды. @@ -269,7 +280,7 @@ public: bool hasEventIdName(String eventIdName) { //Serial.printf("Call from BinaryExprAST _IDNames:%s\n", _IDNames.c_str()); - return _IDNames.indexOf(eventIdName) >= 0; // определяем встречался ли ИД, для которого исполняем сценарий в выражении IF + return _IDNames.indexOf(" " + eventIdName + " ") >= 0; // определяем встречался ли ИД, для которого исполняем сценарий в выражении IF } IoTValue* exec() { @@ -609,7 +620,7 @@ public: case tok_identifier: { if (IDNames) { String tmpstr = *IDNames; - *IDNames = tmpstr + " " + IdentifierStr; + *IDNames = tmpstr + " " + IdentifierStr + " "; } return ParseIdentifierExpr(IDNames); }