Инструменты пользователя

Инструменты сайта


ru:autorun:documentation:expressions

Выражения

В выражениях могут использоваться арифметические операции, операция конкатенации «&» строк и логические операции.

Могут использоваться операторы сравнения: =, <>, >, <, >=, <=.

Также разрешены скобки и операторы AND, OR и NOT. Разрешены ключевые слова True/False, которые эквивалентны 1/0 соответственно.

Могут использоваться внутренние переменные Autorun и существующие переменные окружения.

Могут использоваться внутренние команды Autorun и пользовательские функции. Если команда не возвращает значение, то в выражении ее «результатом» будет пустая строка.

Приоритет выполнения операций в порядке понижения:

NOT
* /
+ -
&
< > <= >= = <> 
AND OR

Пример:

Percent = i * (count / 100)
InRange = i > 1 and i < 10

Арифметические операции

При сложении, вычитании, умножении и делении, если оба выражения числовые (либо обе строки приводятся к числам), выполняются операции над числами.

В случае если одно или оба значения являются строкой, которая не приводится к числу, значение такой строки рассматривается как 0.

MsgBox(1 + 5)         # --> 6
MsgBox("1" + "5")     # --> 6
MsgBox("" + 5)        # --> 5
MsgBox("abc" + "cde") # --> 0

Конкатенация

Данная операция возвращает строку, содержащую объединённые строчные представления значений.

MsgBox(1 & 5)         # --> "15"
MsgBox("1" & 5)       # --> "15"
MsgBox("" & 5)        # --> "5"
MsgBox("abc" & "cde") # --> "abccde"

Сравнение значений

При сравнении, если оба выражения числовые (либо обе строки приводятся к числам), используется числовое сравнение.

В случае если производится сравнение числа со строкой, то оно выполняется по следующей схеме:

  • если одна из строк приводится к числу, а вторая пустая, то её значение рассматривается как 0;
  • если одна из строк приводится к числу, а вторая непустая, то результат сравнения будет равен 0 (False);
  • если ни одна из строк не приводится к числу, выполняется строчное сравнение.

Для строчного сравнения разрешены только = и <>, сравнение при этом регистронезависимое. Для регистрозависимого и лексиграфического сравнения строк используйте функцию StrCompare.

Примеры:

a = 5
MsgBox(a = 5)         # --> 1
MsgBox(a = "5")       # --> 1
MsgBox("" = False)    # --> 1
MsgBox("abc" = "cde") # --> 0
MsgBox("abc" = 1.5)   # --> 0

Логические операции

При использовании логических операторов AND, OR и NOT правила следующие:

  • значения 1 и 0 рассматриваются как True и False;
  • если строка приводится к числу, то 0 рассматривается как False, а ненулевое значение — как True;
  • если строка не приводится к числу, то пустая строка рассматривается как False, а непустая — как True.

Примеры:

a = 5
MsgBox(1 and 2)         # --> 1
MsgBox(1 and 0)         # --> 0
MsgBox(1 and "")        # --> 0
MsgBox(1 and "c")       # --> 1
MsgBox("" or True)      # --> 1
MsgBox("abc" and "cde") # --> 1
MsgBox(not 1)           # --> 0

Выражения в командной записи

Для использования выражений в параметрах при командной записи необходимо, чтобы параметр был в кавычках и непосредственно перед ними стоял знак «%». В этом случае текст будет трактоваться как вычисляемое выражение. Например:

Set Delay 500
Sleep %"1000 + %Delay%"
# результат вычисления — 1500.

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

StrLen var %'"Строка_" & 1' 
# var => 8

При использовании директивы LegacyExpressions в выражениях могут использоваться текстовые константы, не обёрнутые в кавычки, но этот вариант оставлен только для начальной совместимости. Настоятельно рекомендуется переписать код и использовать кавычки повсеместно. Это значительно уменьшит число возможных ошибок.

:!: Данный синтаксис используется только в параметрах команд, записанных в командной записи.

Использование команд и функций в выражениях

В выражениях возможно использование любых команд Autorun, но смысл имеет использование тех, которые возвращают результат.

Для использования в выражении команды в качестве функции она должна быть записана с использованием скобок и запятой в качестве разделителя параметров. Первый параметр (имя переменной для возвращаемого значения) в этом случае не используется. Некоторые команды адаптированы для использования в качестве функции (например: StrPos, StrReplace) и не требуют передачи переключателей. Для остальных команд переключатели при их использовании нужно передавать в первом параметре в кавычках через пробел, при этом текст параметра должен начинаться с символа «~». В общем виде запись выглядит так:

CommandName(["~/S1 /S2 .. /SN",] Param1, Param2, .. , ParamN)

Пример функциональной записи:

zz = "AbXCdEfxQWERXTY"
MsgBox(StrPos(zz, 'x', 1, 1, 1), "Case-sens")
# => 8

Пример командной записи:

Set zz "AbXCdEfxQWERXTY" 
MsgBox %"StrPos('~/S', %zz%, 'x')" "Case-sens" 
# => 8

В выражениях можно использовать вложенные команды:

zz = "  abcdefgh"
MsgBox(StrLeft(StrTrim(%zz%), 3) & '-' & StrPos(%zz%, 'd') & _
'-' & (StrPos('123456789', '5')), "Expr")
# => abc-6-5 

Если внутренние переменные или переменные окружения разворачиваются в параметрах команд (смотрите описания команд), то можно записывать переменную вместе с остальным текстом внутри кавычек. В остальных случаях нужно использовать конкатенацию переменной с текстом:

# переменные окружения разворачиваются в параметре команды
FileExist("%COMMANDER_PATH%\NoClose.exe")
# переменные окружения в параметре команды не разворачиваются
StrLen(%COMMANDER_PATH% & "\NoClose.exe")
ru/autorun/documentation/expressions.txt · Последнее изменение: 2023/04/29 21:36 — loopback

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki