You are on page 1of 6

第一部分: 基础知识

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
此时, 点击按钮, 会弹出对话框. (截图)

You might also like