评估表达式
如果要评估表达式,即检查应用程序的结果,请使用此工具。表达式可以包含之前工具的数字和字符串结果或已手动指定的值。您可以使用各种表达进行评估。请参阅表达式部分以了解可能使用的表达式的详细说明。
与其他 MERLIC 工具不同,此工具在插入时不具备任何默认参数。如果想要在表达式中使用参数,您需要手动将它们添加到工具。请参阅添加参数部分,了解更多信息。
此工具不显示图形窗口,而是显示可在其中定义表达式的输入字段。已评估表达式的结果在工具底部返回。工具在插入时不具备任何默认参数。
输入表达式
在表达式输入字段中键入时,会弹出一个自动完成列表,其中包含与输入内容匹配的可能函数和运算符。该列表还包含手动添加的参数和以前定义的结果。这意味着您可以在此工具的后续表达式中使用此工具中之前表达式的结果,例如,在第三个表达式中使用第一个表达式的结果。但是,无法在前一个表达式中使用后一个表达式的结果,例如,在第一个表达式中使用第三个表达式的结果。
要直接从整个列表浏览,请使用快捷键 CTRL+Space 手动打开该弹出窗口。请查看运算符类型部分,了解有关可能的函数和运算符的更多信息。
在这个图像中,您可以看到通过 CTRL+Space 手动打开的弹出列表,其中包含所有可能的函数和运算符。在列表顶部,您可以看到第一个表达式“NumberMissing”的结果和参数“Region_Accepted”。
添加、删除和移动表达式
您可以手动添加和删除其他表达式。要添加表达式,单击 工具工作区 底部的“ 添加表达式”按钮。单击输入字段右侧的
按钮可以删除表达式。
或者,右键单击 工具工作区 底部的结果并选择“删除”也可以删除结果及其相应的表达式。
您可以通过拖放的方式来移动已添加的表达式,以改变表达式的顺序,例如,为了在下一个表达式中使用上一个表达式的结果。为此,选择要移动的表达式,将其拖动到所需位置,然后将其放在新位置。
对于每个新表达式,都会创建一个新结果,并在工具底部返回。您可以通过双击工具底部的结果名称来重命名结果。要了解关于工具参数和结果允许使用的命名约定的信息,请参阅重命名工具和连接器主题。
您可以隐藏结果,例如,如果有未连接到任何其他工具并且只在 工具流程 后面的表达式中使用的中间结果。右键单击要隐藏的结果,然后选择“隐藏”。要显示隐藏的结果,使用结果右侧的 按钮。

参数
此工具不具备任何默认参数。因此,在插入此工具时不会显示任何参数。如果想要在表达式中使用参数值,您可使用前一工具的结果值,或为工具定义新的参数。
受支持的语义类型
此工具支持以下语义类型的参数:
- 任意
- 双精度浮点数
- 长整数
- 字符串
尽管此工具尚不完全支持 MERLIC 中可用的所有语义类型,您仍可使用前一工具的任何数字或字符串结果,即使此结果的语义类型不受支持,例如,“工具状态”。但是,如果创建了到此类结果的连接,相应新参数的语义类型会被转换并设为“任意”。
由于“长整数”语义类型表示具有更大取值范围的整数,我们在以下说明中仍将其称为整数。
添加参数
使用前一工具的结果作为参数
要在表达式中使用前一工具的结果,您需要将结果连接至“评估表达式”工具。
- 转到想要在“评估表达式”工具中将其结果用作参数的前一工具。
- 将所需工具结果的连接箭头拖至连接的放置目标。此外,您还可打开上下文菜单并单击菜单条目“连接至”。
- 选择“评估表达式”工具并单击菜单条目“< 添加连接 >”。
已连接的结果会立即作为“评估表达式”工具的新参数添加。参数的名称和语义类型将自动从已连接结果获取。如果此工具不支持已连接结果值的语义类型,则会为新参数自动设为“任意”。
此外,您还可按如下所述在工具中定义新参数,然后将新参数连接至前一工具的结果。
定义新参数
要定义新参数,您必须添加新的连接器并定义参数设置。
- 单击工具面板左上方的
按钮。此时会打开用于定义参数设置的对话框窗口。
- 在对话框窗口中选择新参数的语义类型。
- 还可选择定义新参数的最小值和最大值。
- 单击“确定”以确认您的设置。新参数会立即使用默认名称添加。
- 可选择通过双击参数名称来重命名该参数。要了解关于工具参数和工具结果允许使用的命名约定的信息,请参阅重命名工具和连接器章节。
- 在连接器定义新参数的值。
保存参数的语义类型和取值范围后,不可以再次更改这些设置。如果您需要调整参数的语义类型或取值范围,您必须使用所需的设置添加另一个新参数。
表达式
要评估的表达式必须在工具面板的输入字段内定义。只要尚未定义任何表达式或如果定义了无效的表达式,MERLIC 会在 工具面板 和 工具流程 面板中显示错误。但是,此错误仅因缺少表达式或表达式错误而引发。它不提示关键工作区错误。因此,“工具状态”结果在此情况下仍返回“[0; OK]”。
表达式可应用于数字值、字符串值以及混合 tuple。要将工具参数值用于评估,请在表达式的输入字段中输入参数的名称。还可以定义没有任何参数的表达式。
评估方向
表达式的评估通常从左至右进行。但是,如果在表达式中使用了圆括号,可能会更改评估的顺序。
运算类型
运算通常在描述时假定 atomic tuple Tuple 是一系列元素,例如数值和字符串。,即长度为 1 的 tuple。如果 tuple 包含多个控件,大多数运算会按以下方式工作:
- 如果其中一个 tuple 的长度为 1,则其他 tuple 的所有控件将与该单个值相组合以用于选定的运算。
- 如果两个 tuple 的长度都大于 1,则两个 tuple 必须具有相同的长度(否则将发生错误)。在此情况下,选定的运算会应用到具有相同索引的所有控件。作为结果的 tuple 与输入 tuple 的长度相同。
- 如果其中一个 tuple 的长度为 0 ([]),则会发生错误。
我们在下文中介绍可以在表达式中使用的各种运算。
基本 tuple 运算可能会选择一个或多个值、组合 tuple(连结)或获取控件的数量。请参阅下表以了解包含控制数据的 tuple 上的运算。
|
运算 |
描述 |
|---|---|
|
tuple[index] |
选择具有指定 index 号的 tuple 元素。 0 <= index < |tuple| |
|
tuple[index_1:index_2] |
选择从位置 index_1 到 index_2 的 tuple 元素。 |
|
|tuple| |
获取 tuple 的元素数量。 |
|
[tuple_1,tuple_2] |
连结 tuple_1 和 tuple_2。 |
|
[integer_1:integer_2] |
生成从 integer_1 到 integer_2 且增量值为 1 的值序列。 |
|
[integer_1:integer_2:integer_3] |
生成从 integer_1 到 integer_3 且增量值为 integer_2 的值序列。 |
|
find(tuple_1,tuple_2) |
在 tuple_1 中获取 tuple_2 的所有出现次数的索引(如果无匹配,则为 -1)。 |
|
gen_tuple_const(length,value) |
生成预定义 length 的新 tuple,其中每个元素具有相同的值。长度必须定义为整数。 |
|
remove(tuple,index) |
从 tuple 删除具有指定 index 号的元素。 |
|
select_mask(tuple_1,tuple_2) |
从在 tuple_2 中的相应掩码值大于 0 的 tuple_1 中选择所有元素。 |
|
subset(tuple,index) |
选择具有指定 index 号的 tuple 元素。您可以定义单个索引号或一个索引 tuple。 |
|
uniq(tuple) |
从 tuple 中丢弃所有连续相同的元素,仅保留一个。 |
连结选取一个或多个变量或常量作为输入。它们都在方括号中列出,以逗号分隔。结果也是 tuple。注意以下事项:[[tuple]] = [tuple] = tuple.
|tuple| 返回 tuple 的元素的数量。元素索引的范围为 0 到元素数量减 1,即 |tuple|−1。因此,选择索引必须在此范围内。
|
示例 tuple |
示例运算 |
|---|---|
|
tuple = [7,8,9] |
tuple[1] = 8 |
|
tuple = [1,2,3,7,8,9] |
tuple[2:4] = [3;7;8] |
|
tuple = [7,8,9] |
|tuple| = 3 |
|
tuple_1 = [1,2,3] tuple_2 = [7,8,9] |
[0,tuple_1,tuple_2,27,89] = [0;1;2;3;7;8;9;27;89] |
|
integer_1 = 7 integer_2 = 13 |
[integer_1:integer_2] = [7;8;9;10;11;12;13] |
|
integer_1 = 1 integer_2 = 2 integer_3 = 10 |
[integer_1:integer_2:integer_3] = [1;3;5;7;9] |
|
tuple_1 = [1,2,3,7,8,9] tuple_2 = [3,7] tuple_3 = [7,3] |
find(tuple_1, tuple_2) = 2 find(tuple_1, tuple_3) = -1 |
|
length = 4 value = 23 |
gen_tuple_const(4,23) = [23;23;23;23] |
|
tuple = [1,2,3,7,8,9] |
remove(tuple, [0,4]) = [2;3;7;9] |
|
tuple_1 = [0,1,2,3,4,5] tuple_2 = [1,1,0,1,0,0] |
select_mask(tuple_1, tuple_2) = [0;1;3] |
|
tuple = [2,4,8,16,16,32] |
subset(tuple, [0,2,4]) = [2;8;16] |
|
tuple = [1,1,0,1,0,0] |
uniq(tuple) = [1;0;1;0] |
以下基本算术运算可用。
|
运算 |
描述 |
|---|---|
|
number_1 / number_2 |
除法 |
|
number_1 * number_2 |
乘法 |
|
number_1 % number_2 |
系数 |
|
number_1 + number_2 |
加法 |
|
number_1 - number_2 |
减法 |
|
-number_1 |
非 |
系数可应用于整数,所有其他运算可应用于整数或实数。如果至少有一个操作数是实数类型,则结果也将是一个实数。
算术运算示例
|
表达式 |
结果 |
|---|---|
|
4 / 3 |
1 |
|
4 / 3.0 |
1.3333333 |
|
(4 / 3) * 2.0 |
2.0 |
以下运算可用于数字的位处理。运算对象必须为整数。
|
运算 |
描述 |
|---|---|
|
lsh (integer_1,integer_2) |
向左移位。结果为应用了 integer_2 次的 integer_1 的逐位向左移位。 |
|
rsh (integer_1,integer_2) |
向右移位。结果为应用了 integer_2 次的 integer_1 的逐位向右移位。 |
|
integer_1 band integer_2 |
逐位 and |
|
integer_1 bxor integer_2 |
逐位 xor |
|
integer_1 bor integer_2 |
逐位 or |
|
bnot integer |
逐位补足 |
对于 lsh 和 rsh 运算,如果第二个运算对象具有负值或其值大于 32,则会得到不明确的结果。
提供几种用于修改、选择和组合字符串的字符串运算。此外,某些预算允许将整数和实数转换为字符串。
|
运算 |
描述 |
|---|---|
|
value $ string |
使用规格 string 转换 value。请参阅 $(字符串转换)部分,了解更多信息。 |
|
value_1 + value_2 |
连结 value_1 和 value_2。至少有一个值必须是字符串。 |
|
strchr(string, char) |
在 string 中搜索第一次出现的某个字符 char。 |
|
strrchr(string, char) |
在 string 中搜索最后一次出现的某个字符 char(反向)。 |
|
strstr(string_1, string_2) |
在 string_1 中搜索第一次出现的子字符串 string_2。 |
|
strrstr(string_1, string_2) |
在 string_1 中搜索最后一次出现的子字符串 string_2(反向)。 |
|
strlen(string) |
返回 string 的长度。 |
|
string{index} |
在位置 index 搜索字符。 0 <= index <= strlen(string)-1. |
|
string{index_1:index2} |
选择从位置 index_1 到位置 index_2 的子字符串。 |
|
split(string_1, string_2) |
在 string_2 将 string_1 分割为子字符串。 |
|
regexp_match(string_1, string_2) |
提取符合正则表达式 string_2 的 string_1 的子字符串。 |
|
regexp_replace(string_1, regex, string_2) |
使用 string_2 替换符合正则表达式 regex 的 string_1 的第一个子字符串。 |
|
regexp_select(string, regex) |
从 string 选择符合正则表达式 regex 的 tuple 元素。 |
|
regexp_test(string, regex) |
返回 string 中符合正则表达式 regex 的 tuple 元素的数量。 |
|
示例字符串 |
示例运算 |
|---|---|
|
string = '0,7f' |
4 $ 'string' = "4.0000000" |
|
value_1 = 'good' value_2 = 'morning' |
value_1 + value_2 = 'goodmorning' |
|
string = 'exemplary' |
strchr(string, 'xyz') = 1 |
|
string = 'exemplary' |
strrchr(string, 'xyz') = 8 |
|
string_1 = 'mississippi' string_2 = 'ss' |
strstr(string_1, string2) = 2 |
|
string_1 = 'mississippi' string_2 = 'ss' |
strrstr(string_1, string2) = 5 |
|
string = 'incomprehensibilities' |
strlen(string) = 21 |
|
string = 'abaaabbaababaa' |
string{7} = "a" |
|
string = 'abaaabbaababaa' |
string{7:10} = "aaba" |
|
string_1 = 'appendix.pdf' string_2 = '.' |
split(string_1, string_2) = [appendix;pdf] or split(string_1, 'pp') = [a;endix.;df] |
|
string_1 = ['XXS001.JPG', 'XXS002.JPG', 'XXS003.JPG'] string_2 = 'XXS(.*)' |
regexp_match(string_1, string_2) = [001.JPG, 002.JPG, 003.JPG] |
|
string_1 = 'goodmorning' regex = 'g' string_2 = 'G' |
regexp_replace(string_1, regex, string_2) = "Goodmorning" |
|
string = ['img1.jpg', 'img2.png'; 'appendix.pdf', my_dir'] regex = '.(jpg|png)' |
regexp_select(string, regex) = ['img1.jpg', 'img2.png'] |
|
string = ['img1.jpg', 'img1.png', 'img2.jpg', 'img2.png'] regex = '(.png)' |
regexp_test(string, regex) = 2 |
另请参阅各个字符串运算的更详细说明。
$ 将数字转换为字符串或对字符串进行修改。$ 左边的运算对象是转换的数字。$ 右边的运算对象指定转换。它类似于 C 编程语言中 printf() 函数的格式字符串。格式字符串包含以下四个部分:
<标记><宽度>.<精度><转换>
或作为正则表达式:
[-+ #]?([0-9]+)?(\.[0-9]*)?[doxXfeEgGsb]?
正则表达式大致会转化为 0 或第一个方括号对中的更多字符,后面紧跟 0 或更多数位;也可以紧跟 1 个点,其后可能带有若干数位,之后紧跟最后一个方括号对中的转换字符。
字符串转换 $ 示例
|
表达式 |
结果 |
|---|---|
|
23 $ '10.2f' |
"23.00" → ".....23.00" |
|
23 $ '-10.2f' |
"23.0 " → "23.00....." |
|
4 $ '.7f' |
"4.0000000" |
|
1234.56789 $ '+10.3f' |
" +1234.568" |
|
255 $ 'x' |
"ff" |
|
255 $ 'X' |
"FF" |
|
0xff $ '.5d' |
"00255" |
|
'total' $ '10s' |
"total" → ".....total" |
|
'total' $ '-10s' |
"total " → "total....." |
|
'total' $ '10.3' |
"tot"→ ".......tot" |
为了更好地理解,带有额外空白的结果列出了两次,其中“.”表示输入字符串前后的额外空白,例如,在 total..... 字符串中,最后 5 个点代表空白。
格式字符串的各个部分如下:
标记:
零或更多标记,按任意顺序排列,用于修改转换规范的含义。标记可能包含以下字符:
标记
描述
-
转换的结果会在字段中左对齐。
+
带符号的转换的结果始终以符号开头,即 + 或 -。
空格
如果带符号的转换的第一个字符不是符号,则会在结果中添加空格字符作为前缀。
#
值将转换为“替代形式”。
对于 d 和 s(见下文)转换,此标记没有任何效果。
对于 o 转换(见下文),它会增加准确度以迫使结果的第一个数字为 0。
对于 x 或 X 转换(见下文),非 0 结果会带有 0x 或 0X 前缀。
对于 e、E、f、g 和 G 转换,结果会始终包含基数字符,即使基数字符后无任何数字也是如此。
对于 g 和 G 转换,不会从结果中删除尾随的 0,这与通常的行为相反。
宽度:
可选的十进制数字符串,用于指定最小字段宽度。对于输出字段,如果转换的值的字符小于字段宽度,会在其左边(或右边,如果提供了左调整标记 -)填充以达到字段宽度。
精度:
精度指定整数转换显示的最小位数(字段使用前导 0 填充)、e 和 f 转换在基数字符后显示的位数、g 转换的有意义位数的最大数量,或从字符串转换打印的最大字符数量。精度采用圆点 . 后接十进制数字符串的形式。null 字符串会被视为 0。
转换:
转换字符表示要应用的转换的类型:
转换字符
描述
d、o、x、X
整数参数以带符号的十进制 (d)、无符号的八进制 (o) 或无符号的 十六进制表示法(x 和 X)打印。
x 转换使用数字和小写字母 0123456789abcdef,而 X 转换使用数字和大写字母 0123456789ABCDEF。参数的精度组件指定要显示的最小位数。
如果转换的值可以用比指定的最小位数更少的位数表示,它会使用前导 0 进行扩充。默认精度为 1。使用精度 0 转换零值的结果为无字符。
f
浮点数参数以十进制表示法按 [-]ddd.ddd 的样式打印,其中基数字符后的位数 . 等于精度规范。
如果从参数中省略精度,输出结果为六个数位;如果精度明确为 0,则不会显示任何基数。
e、E
浮点数参数按 [-]d.ddde+dd 的样式打印,其中基数字符前有一个数位,而其后的数位等于精度。
如果缺少精度,会生成六个数位;如果精度为 0,则不会显示任何基数字符。
E 转换字符生成带有 E 的数字,引入指数代替 e。指数始终包含至少两个数位。但是,如果要打印的值需要大于两个数位的指数,则会在必要时打印额外的指数数位。
g, G
浮点数参数按样式 f 或 e(或在具有 G 转换字符时按样式 E)打印,并带有指定有意义位数的精度。
使用的样式取决于转换的值;样式 e 仅用于从转换生成的指数小于 -4 或者大于或等于精度的情况。尾随的 0 将从结果中删除。仅当后面带有数字时才显示基数字符。
s
参数被当作字符串,并打印字符串的字符,直到字符串的末尾或达到参数的精度规范指示的字符数。
如果从参数中省略精度,它会被解释为无穷大,并打印直到字符串末尾的所有字符。
不存在或不充足的字段宽度决不会导致字段截短。如果转换结果的宽度大于字段宽度,字段将会扩充以容纳转换结果。
字符串联结 (+) 可以与字符串或所有数字类型结合应用。如有必要,运算对象会首先转换为字符串(根据其标准表示)。至少一个运算对象必须已经为字符串,以便运算符充当字符串联结符。
字符串连结示例
|
表达式 |
结果 |
|---|---|
|
'Name'+Counter+'.png' |
例如,“Name2.png” |
该示例中生成了一个文件名(例如,“Name2.png”)。为此,连接了两个字符串常量(“Name”和“.png”)以及一个整数值(回路索引计数)。
strchr(string,char) 返回某个 char 字符在 string 中第一次出现的索引,而 strrchr(string,char) 返回某个 char 字符在 string 中最后一次出现的索引。如果 string 中没有字符出现,则返回 -1。string 可能是单一字符串或字符串 tuple。
str(r)chr 示例
|
表达式 |
结果 |
|---|---|
|
strchr('abaaab','a') |
0 |
|
strrchr('abaaab','a') |
4 |
strstr(string_1,string_2) 返回 string_2 在 string_1 中第一次出现的索引,而 strrstr(string_1,string_2) 返回 string_2 在 string_1 中最后一次出现的索引。如果 string_2 没有在 string_1 中出现,则返回 -1。string_1 可能是单一字符串或字符串 tuple。
str(r)str 示例
|
表达式 |
结果 |
|---|---|
|
strstr('abaaab','ab') |
0 |
|
strrstr('abaaab','ab') |
4 |
strlen(string) 返回 string 中的字符数量。
strlen 示例
|
表达式 |
结果 |
|---|---|
|
strlen('abaaab') |
6 |
string{index} 从 string 选择单个字符(由索引位置指定)。索引范围为 0 到 string 长度减 1。该运算符的结果为长度为 1 的字符串。
string{index_1:index_2} 以字符串形式返回 s 中从第一个指定的索引位置 (index_1) 直到第二个指定的位置 (index_2) 的所有字符。索引范围为 0 到 string 长度减 1。
{} 示例
|
表达式 |
结果 |
|---|---|
|
'abaaab'{1} |
"b" |
|
'abaaab'{1:5} |
"baab" |
split(string_1,string_2) 将 string_1 分割为单个子字符串。String_1 在其包含 string_2 中字符的位置进行分割。
split 示例
|
表达式 |
结果 |
|---|---|
|
split('/usr/image:/usr/proj/image',':') |
["/usr/image";"/usr/proj/image"] |
该字符串在字符“:”处分割为两个子字符串。子字符串以 tuple 方式返回。
regexp_match(string_1,string_2) 搜索 tuple string_1 中符合正则表达式 string_2 的元素。它返回与输入 tuple 相同大小的元祖。生成的 tuple 包含输入 tuple 每个 tuple 控件的匹配结果。对于成功的匹配,将返回匹配的子字符串。否则,将返回空字符串。
regexp_match 示例
|
表达式 |
结果 |
|---|---|
|
regexp_match('abba','b+a*') |
"bba" |
|
regexp_match(['img123','img124'],'img(.*)') |
["123";"124"] |
regexp_replace(string_1,regex,string_2)将 string_1 中符合正则表达式 regex 的子字符串替换为 string_2 中提供的字符串。默认情况下,仅替换 string_1 中每个元素的第一个匹配子字符串。要替换所有出现的字符串,必须在 regex 中设置 'replace_all'选项。
regexp_replace 示例
|
表达式 |
结果 |
|---|---|
|
regexp_replace('abaaab','a','b') |
"bbaaab" |
|
regexp_replace('abaaab',['a','replace_all'],'b') |
"bbbbbb" |
regexp_select(string_1,regex) 仅返回 tuple string_1 中符合正则表达式 regex 的元素。与 regexp_match 相比,会返回原始 tuple 控件,而不是匹配的子字符串。不匹配正则表达式的 tuple 控件将被丢弃。此外,regexp_select 支持 'invert_match' 选项,该选项会导致选择不符合正则表达式的输入字符串。
regexp_select 示例
|
表达式 |
结果 |
|---|---|
|
regexp_select(['mydir', 'a.png', 'b.txt', 'c.bmp', 'd.dat'], '.(bmp|png)') |
["a.png"; "c.bmp"] |
|
regexp_select(['mydir', 'a.png', 'b.txt', 'c.bmp', 'd.dat'], ['.(bmp|png)', 'invert_match']) |
["mydir"; "b.txt"; "d.dat"] |
regexp_test(string,regex) 返回 tuple string 中符合正则表达式 regex 的元素的数量。此外,可以使用该运算符的简略表示法,方便在条件表达式中使用: string_1 =~ string_2
|
表达式 |
结果 |
|---|---|
|
regexp_test(['mydir','a.png','b.txt','c.bmp','d.dat'],'.(bmp|png)') |
2 |
|
['mydir','a.png','b.txt','c.bmp','d.dat'] =~ '.(bmp|png)' |
2 |
可评估以下对比运算。它们还可以在具有任意控件数量的 tuple 中进行定义。它们始终返回布尔值。
|
运算 |
描述 |
|---|---|
|
tuple_1 < tuple_2 |
小于 |
|
tuple_1 > tuple_2 |
大于 |
|
tuple_1 <= tuple_2 |
小于等于 |
|
tuple_1 >= tuple_2 |
大于或等于 |
|
tuple_1 == tuple_2 ; tuple_1 = tuple_2 |
等于 |
|
tuple_1 != tuple_2 ; tuple_1 # tuple_2 |
不等于 |
tuple_1 == tuple_2 和 tuple_1 != tuple_2 可在所有类型中定义。如果两个 tuple 具有相同的长度,并且每个索引位置上的所有数据项目相等,则它们相等 (true)。如果操作数具有不同的类型(整数和实数),则整数值会先被转换成实数。字符串值不得与数字混合,即,字符串值被视作不等于其他类型的值。
tuple对比示例
|
第 1 个运算对象 |
运算 |
第 2 个运算对象 |
结果 |
|---|---|---|---|
|
1 |
== |
1.0 |
1 |
|
[] |
== |
[] |
1 |
|
'' |
== |
[] |
0 |
|
[1,'2'] |
== |
[1,2] |
0 |
|
[1,2,3] |
== |
[1,2] |
0 |
|
[4711,'Hugo'] |
== |
[4711,'Hugo'] |
1 |
|
'Hugo' |
== |
'hugo' |
0 |
|
2 |
> |
1 |
1 |
|
2 |
> |
1.0 |
1 |
|
[5,4,1] |
> |
[5,4] |
1 |
|
[2,1] |
> |
[2,0] |
1 |
|
true |
> |
false |
1 |
|
'Hugo' |
< |
'hugo' |
1 |
这四个对比运算会计算 tuple 的词典顺序。在相等的索引位置,类型必须相同。但是,整数、实数和布尔的类型值会自动调整。词典顺序适用于字符串,而布尔值 false 被视为小于布尔值 true (false < true)。
这些对比运算会以逐元素的方式对比输入 tuple tuple_1 和 tuple_2。
|
运算 |
描述 |
|---|---|
|
tuple_1 [<] tuple_2 |
小于 |
|
tuple_1 [>] tuple_2 |
大于 |
|
tuple_1 [<=] tuple_2 |
小于等于 |
|
tuple_1 [>=] tuple_2 |
大于或等于 |
|
tuple_1 [==] tuple_2 ; tuple_1 [=] tuple_2 |
等于 |
|
tuple_1 [!=] tuple_2 ; tuple_1 [#] tuple_2 |
不等于 |
如果两个 tuple 具有相同的长度,则会对比两个 tuple 相应的控件。否则,tuple_1 或 tuple_2 的长度必须为 1。在此情况下,会使用另一个 tuple 的单个控件对较长 tuple 的每个控件执行对比。作为逐控件对比 tuple 的前提,两个相应的控件之一必须为(整数或浮点型)数字或者都为字符串。
逐控件 tuple 对比示例
|
第 1 个运算对象 |
运算 |
第 2 个运算对象 |
结果 |
|---|---|---|---|
|
[1,2,3] |
[<] |
[3,2,1] |
[1;0;0] |
|
['a','b','c'] |
[==] |
'b' |
[0;1;0] |
|
['a','b','c'] |
[<] |
['b'] |
[1;0;0] |
可评估以下布尔运算。
|
运算 |
描述 |
结果 |
|---|---|---|
|
boolean_1 and boolean_2 |
Logical "and" |
1 (true) 如果两个运算对象都为 true。 |
|
boolean_1 xor boolean_2 |
Logical "xor" |
1 (true) 如果只有其中一个运算对象为 true。 |
|
boolean_1 or boolean_2 |
Logical "or" |
1 (true) 如果至少其中一个运算对象为 true。 |
|
not boolean |
Negation |
1 (true) 如果输入为 false;0 (false),如果输入为 true。 |
布尔运算 and、xor、or 和 not 仅为长度为 1 的 tuple 定义。
可评估以下三角函数。
|
函数 |
描述 |
|---|---|
|
sin(numbers) |
numbers 的正弦 |
|
cos(numbers) |
numbers 的余弦 |
|
tan(numbers) |
numbers 的正切 |
|
asin(numbers) |
以下区间中 numbers 的反正弦 |
|
acos(numbers) |
以下区间中 numbers 的反余弦 |
|
atan(numbers) |
以下区间中 numbers 的反正切 |
|
atan2(numbers_1,numbers_2) |
以下区间中 numbers_1/numbers_2 的反正切 |
|
sinh(numbers) |
numbers 的双曲正弦 |
|
cosh(numbers) |
numbers 的双曲余弦 |
|
tanh(numbers) |
numbers 的双曲正切 |
所有这些函数担任数字 tuple 中的参数。输出可以是整数或实数。但是,结果类型将为实数。这些函数适用于所有 tuple 值,而生成的 tuple 具有与输入 tuple 相同的长度。对于 atan2,两个输入 tuple 的长度必须相等。对于三角函数,角以弧度指定。
可评估以下指数函数。
|
函数 |
描述 |
|---|---|
|
exp(numbers) |
指数函数 |
|
log(numbers) |
自然对数 ln(numbers),numbers > 0 |
|
log10(numbers) |
十进制对数 log10(numbers),numbers > 0 |
|
pow(numbers_1,numbers_2) |
|
|
ldexp(numbers_1,numbers_2) |
|
所有这些函数担任数字 tuple 中的参数。输出可以是整数或实数。但是,结果类型将为实数。这些函数适用于所有 tuple 值,而生成的 tuple 具有与输入 tuple 相同的长度。对于 pow 和 ldexp,两个输入 tuple 的长度必须相等。
可评估以下数值函数。
|
函数 |
描述 |
|---|---|
|
abs(numbers) |
返回与 numbers 类型相同的绝对值(整数或实数)。 |
|
ceil(numbers) |
不小于 numbers 的最小整数值。此函数适用于整数和实数。 结果值始终为实数。 |
|
cumul(tuple) |
返回相应 tuple 元素的累积和。如果至少一个元素是实数,则结果值将为实数。如果所有元素均为整数,结果值也将为整数。 |
|
deg(numbers) |
将 numbers 从弧度转换为度。此函数适用于整数和实数。结果值始终为实数。 |
|
deviation(tuple) |
计算 tuple 的标准偏差值。此函数适用于整数和实数。结果值始终为实数。 |
|
fabs(numbers) |
numbers 的绝对值(始终为实数)。此函数适用于整数和实数。结果值始终为实数。 |
|
floor(numbers) |
返回不大于 numbers 的最大整数值。此函数适用于整数和实数。 结果值始终为实数。 |
|
fmod(numbers_1, numbers_2) |
返回 numbers_1/numbers_2 的小数部分,具有与 numbers_1 相同的符号。此函数适用于整数和实数。结果值始终为实数。 |
|
int(numbers) |
将实数 numbers 转换为整数并将其截短。如果 numbers 已经是整数,则返回输入内容。 |
|
max(tuple) |
选择 tuple 的最大值。所有值都必须是字符串或整数/实数。不允许混合字符串与数字值。如果至少一个元素是实数,则结果值将为实数。如果所有元素均为整数,结果值也将为整数。 |
|
max2(tuple_1, tuple_2) |
逐元素选择 tuple_1 和 tuple_2 的最大值。 |
|
mean(tuple) |
计算 tuple 的平均值。此函数适用于整数和实数。结果值始终为实数。 |
|
median(tuple) |
计算 tuple 的中值。如果至少一个元素是实数,则结果值将为实数。如果所有元素均为整数,结果值也将为整数。 |
|
min(tuple) |
选择 tuple 的最小值。所有值都必须是字符串或整数/实数。不允许混合字符串与数字值。如果至少一个元素是实数,则结果值将为实数。如果所有元素均为整数,结果值也将为整数。 |
|
min2(tuple_1, tuple_2) |
逐元素选择 tuple_1 和 tuple_2 的最小值。 |
|
rad(numbers) |
将 numbers 从度转换为弧度。此函数适用于整数和实数。结果值始终为实数。 |
|
real(numbers) |
将整数 numbers 转换成实数。如果 numbers 已经是实数,则返回输入内容。 |
|
round(numbers) |
将实数 numbers 转换为整数并将值四舍五入。 |
|
select_rank(tuple, index) |
返回 tuple 的 index 位置的元素。此函数适用于包含整数值或实数值的 tuple。index 是整数。 |
|
sgn(numbers) |
Tuple 的值符号或元素级符号。 |
|
sqrt(numbers) |
计算 numbers 的平方根。此函数适用于整数和实数。 结果值始终为实数。 |
|
sum(tuple) |
计算所有 tuple 元素或字符串连结之和。所有值都必须是字符串或整数/实数。不允许混合字符串与数字值。如果至少一个元素是实数,则结果值将为实数。如果所有元素均为整数,结果值也将为整数。如果值为字符串,将使用字符串连结,而不使用加法。 |
还可评估以下函数:
|
函数 |
描述 |
|---|---|
|
chr(numbers) |
将 ASCII 码转换为字符。 |
|
chrt(integer) |
将整数 tuple 转换为字符串。 |
|
environment(string) |
环境变量的值。string 是字符串形式的环境变量的名称。 |
|
inverse(tuple) |
反转 tuple 值的顺序。如果 tuple 为空且长度为 1,或如果 tuple 在所有位置仅包含一个值(例如,[1,1,...,1])则 inverse 与 sort 相同。 |
|
is_number(value) |
测试 value 是否为数字。如果 value 是整数、实数或表示数字的字符串,则会返回 1 (true)。 |
|
number(value) |
根据数字的类型将代表数字的字符串转换为整数或实数。以 0x 开头的字符串被解释为十六进制数,以 0(零)开头的字符串被解释为八进制数,例如,字符串“20”被转换为整数 20,“020”被转换为 16,而“0x20”被转换为 32。如果通过不代表数字的字符串或者整数或实数类型的变量进行调用,数字将按输入的原样返回。 |
|
ord(numbers) |
整数形式的字符的 ASCII 码。 |
|
ords(string) |
将字符串 tuple 转换为 ASCII 整数 tuple。 |
|
rand(numbers) |
创建随机数。 |
|
sort(tuple) |
按升序对 tuple 进行排序,即生成的 tuple 的第一个值为最小值。如果 tuple 为空且长度为1,或如果 tuple 在所有位置仅包含一个值(例如,[1,1,...,1])则 sort 与 inverse 相同。 |
|
sort_index(tuple) |
按升序对 tuple 进行排序,但返回已排序值的索引位置。 |
下表显示用于控制数据的运算优先级(从上到下递增)。省去了一些运算(例如函数、| |、tuple[] 等),因为它们清楚地标记了其参数。
|
优先级从上到下递增 |
|---|
|
band |
|
bxor bor |
|
and |
|
xor or |
|
!= == # = |
|
<= >= < > |
|
+ - |
|
/ * % |
|
- (unary minus) not |
|
$ |
使用特殊字符
此工具使用单引号表示字符串。但是,如果特殊字符使用单引号,那么对应字符应使用反斜杠进行转义,例如,'\t' 被处理为制表符。
请参阅下面特殊字符列表。
|
替代符号 |
描述 |
|---|---|
|
\n |
换行符 |
|
\t |
水平制表符 |
|
\v |
垂直制表符 |
|
\b |
退格 |
|
\r |
回车 |
|
\f |
换页 |
|
\a |
响铃 |
|
\\ |
反斜杠 |
|
\' |
单引号 |
以下示例显示一个参数与 Parameter = \t 配合使用时生成的值:
|
表达式 |
结果 |
描述 |
|---|---|---|
|
Parameter |
\t |
\t 被处理为字符串。 |
|
strlen(Parameter) |
2 |
\t 被处理为包含两个字符的字符串。 |
|
strlen('\t') |
1 |
\t 被处理为制表符字符。 |
|
'a\tb' |
a b |
\t 被处理为制表符。 |
|
ords(Parameter) |
[92;116] |
\t 被处理为字符串。 |
|
ords('\t') |
9 |
\t 被处理为制表符字符。 |
结果
基本结果
结果:
此结果返回生成的表达式的值。默认情况下,这是第一个表达式的结果。每个其他表达式都会返回一个其他结果。结果的语义类型设置为“任意”。
工具状态:
“工具状态”返回有关工具状态的信息,因此可用于处理错误。请参阅主题工具状态结果,了解关于不同工具状态结果的更多信息。
其他结果
处理时间:
此结果返回最近一次执行工具的持续时间(以毫秒为单位)。该结果作为附加结果提供。因此,默认情况下它是隐藏的,但是可以通过工具结果旁边的 按钮显示。有关更多信息,处理时间请参工具参考中所阅部分。
应用程序示例
此工具用于以下 MERLIC Vision App 示例:
- adapt_brightness_for_measuring.mvapp
- calibrate_for_ruler_changed_distance.mvapp
- calibrate_for_ruler_distorted.mvapp
- calibrate_for_ruler_simple.mvapp
- check_bent_leads.mvapp
- check_correct_filling_on_3d_height_images.mvapp
- check_pen_parts.mvapp
- check_presence_of_fuses.mvapp
- check_saw_angles.mvapp
- check_single_switches.mvapp
- classify_pills.mvapp
- count_bottles_with_deep_learning.mvapp
- determine_circle_quality.mvapp
- evaluate_ecc_200_print_quality.mvapp
- find_and_count_screw_types.mvapp
- measure_distance_segment_circle_calibrated.mvapp
- measure_distance_to_center_led.mvapp
- recognize_color_of_cables.mvapp
- segment_pill_defects.mvapp
- segment_pills_by_shape.mvapp