|
第一部分: 基础知识
PML基本概念
Programmable Macro Language 可编程宏语言.
通常的PML开发包括两部分, 一部分是PML宏,脚本语言; 另一部分是PML2,面向对象的编程语言.
1. PML宏(Macro)
宏, 就是一系列pml命令的集合.
通过$m执行.
格式为: $m filename [param1 param2 ….]
(举例)
其中param1为参数, 宏可以参数化.
(举例)
2. 面向对象的PML2
PML支持对象(Object),对话框(Form)和菜单(Menu).
(举例)
一. 变量,函数和方法
1. 变量的定义及用法
在PML2中, 每一个变量都是对象. 变量名以!或者!!开头,例如!weight. !开头的变量为局部变量, !!开头的为全局变量.
PML内置了常用的变量类型.
(1) Real 实属类型. 提供基本的四则运算操作. 例如
!a = 10
!b = 10
!a = !a + !b
$p $!a --输出变量a的值
(2) String 字符串类型. 例如
!strName = ‘/EQUI-TEST-1’
(3) Boolean 用于逻辑表达式. 值只能是true/false
(4) Array 数组
(5) Position
(6) Direction
3. 变量的创建, 删除, 查看
变量可以用赋值来创建. 例如
!str = ‘abc’
也可以用类型标识来创建.
! str = string()
! str = ‘abc’
删除: ! str.delete()
查看:通常使用 q var! str 也可以用$p $!str
4. 方法(method) 和函数(Function)
Method是一个对象的子程序. 只有当对象存在,才可以调用对象的方法. 例如
!strNum = ‘123’
!num = !strNum.Real()
$p $!num
以上的代码, 调用的string类型的real()方法, 将字符串转换为数字,并输出.
函数的用法与方法类似, 同样有参数和返回值. 但函数是独立存在的,全局的. 在任何地方, 都可以调用.
二. 程序的结构控制
1. 循环语句
(1) Do循环
例如:
!sum = 0
Do !i From 1 To 100 By 1
!sum = !sum + !i
Enddo
其中!i为循环变量, 初始值为1, 终指为100, 步长为1. 当步长为1是,一般省略.
(2) 中断
Break: 中断并跳出最内层循环
(3) 跳过
Skip. 跳过当此存换. 例如
!sum = 0
Do !i From 1 To 100 By 1
Skip if ( int(!i / 2) eq (!i / 2)) $* 跳过所有的偶数
!sum = !sum + !i
Enddo
2. 逻辑控制语句
格式为if () then … else …
其中括号内的必须是表达式.
例如:
IF (TYPE OF OWNER EQ ‘BRAN’) THEN
$P BRANCH $!!CE.OWNER.NAME
ELSEIF (TYPE EQ ‘BRAN’) THEN
$P BRANCH $!!CE.NAME
ELSE
$P NOT BRANCH
ENDIF
其中elseif /else可选, elseif可多个.
3. 跳转语句
定义标记Label /label1
跳转Golabel /gol1
不建议使用.
三. 其他相关语句
1. 数组
字符串长度 Length()
类型转换 Real(),Position(),Boolean()
大小写转换 LowCase(),UpCase()
两端截取 After(str2),Before(str2),Substring(index)
中间截取 Substring(index,nchars)
替换 Replace(str2,str3)
匹配 Match(str2)
分割(返回数组) Split()
修剪 Trim()
2. 字符串
元素数量 Size()
追加元素 Append(value)
追加数组 AppendArray(Array)
删除全部元素 Clear()
倒序 Invert()
搜索 Find(value),FindFirst(value)
和并重复项 Unique()
3. 表达式
(1) 算术运算符
+ - * /
(2) 连接运算符
&
(3) 比较运算符
LT GT EQ NEQ
(4) 逻辑运算符
AND OR NOT
4. 计算函数
Sqrt(x)
Power(x, e)
Int(x)
Sin(x)
Cos(x)
5. 注释
单行注释 用—开头. –之前不可出现空格之外的字符
单行注释 $*. $*之后的内容为注释. $*之前可出现其他字符
段落注释. 用$(和$)将注释内容包括进来.
(举例)
6. 打印
$p 打印内容
例如 $p test line
打印多行
$p line 1 $
Line 2
输出内容包括变量
$p ce.name is $!!ce.name
其中$为转义字符, 如果要输出$, 则使用$$
7. 异常处理
程序运行中, 可能需要意料之中的可能发生的异常/错误, 例如节点创建失败, 遍历子节点时超过最后一个等等. 这时需要捕捉异常,作出相应的处理.
(1) 异常捕捉
例如
Site /TEST_SITE
Handle (2, 109) $*
$p节点不存在
Endhandle
其中(2, 109)为错误编号. 也可以使用handle any捕捉任意类型的错误.
(2) 捕捉多个异常
Site /TEST_SITE
Handle (2, 109) $*
$p节点不存在
Elsehandle (2, 108)
$p /TEST_SITE节点存在, 但不是SITE类型
elsehandle none
$p Site /TEST_SITE节点存在
endhandle
其中handle none表示没有遇到错误的情况.
四. 用户自定义方法/用自定义函数/自定义对象
(1) 自定义方法
Define method .方法名(参数1 is 类型, 参数2 is 类型…) is 返回值类型
其中 参数可没有 返回值可以没有
例如
Define method .Sum(!a is real, !b is real) is real
!sum = !a + !b
Return !num
endmethod
(2) 自定义函数
Define function !!sum(!a is real, !b is real) is real
!sum = !a + !b
Return !num
endFunction
与方法类似. 一个文件里只能定义一个函数,扩展名为pmlfnc, 必须放在指定的文件夹下,并执行pml rehash all
(3) 自定义对象
Define object 对象名
endobject
五. 文件处理
(1) 读取
!file = object FILE(‘d:\abc123.txt')
!lines = !file.ReadFile()
Q var!lines
(2) 写入
!arr = array()
!arr.append(‘line1’)
!arr.append(‘line1’)
!file = object FILE('d:\abc.txt')
!file.WriteFile('WRITE', ! arr) $*将数组!arr写入文件
其中’Write’可以换成'OVERWRITE'(覆盖)和'APPEND'(追加)
六. 对话框及菜单
1. 系统对话框
(1) 询问!!alert
!confirm = !!alert.confirm('确定要删除吗?')
if(!confirm neq 'YES') then
return
endif
(2) 警告
!!alert.message(‘message’)
(3) 错误提示
!!alert.error(‘error’)
2. 自定义对话框
SETUP FORM !!custumForm
TITLE '自定义对话框’
Text .text1 ‘点击按钮’
Button .ok
Exit
这是一个最简单的对话框, 显示一个文本框加上按钮, 但是点击按钮不会有任何反应. (截图)
3. 对话框调用/初始化
Pmlhash all
Pml reload form !!custumForm
Show !!custumForm
4. 默认构造方法/初始化方法
每个form初始化时, 会自动调用与其名字相同的方法. 在刚才的代码中加上
Define method .custumForm()
!this.text1.tag = ‘初始化完成’
Endmethod
除此以外, 还可以加上默认的初始化函数
在开头加上一行!this.initcall = '!this.init()', 调用构造方法结束,显示之前,会自动调用init()方法
5. 界面消息的响应
界面消息的相应, 例如点击按钮, 选择下拉框等, 用callback关联.
SETUP FORM !!custumForm
TITLE '自定义对话框’
Text .text1 ‘点击按钮’
Button .ok ‘OK’
Exit
Define method .custumForm()
!this.text1.tag = ‘初始化完成’
!this.ok.callback = ‘!this.ok()’
Endmethod
Define method .ok()
!!alert.message(‘OK’)
Endmethod
此时, 点击按钮, 会弹出对话框. |
|