系统选择了V6R1的版本,ILE环境(从OPM转到ILE不需要解释了吧)。这是因为V6R1有一个重大提升:RPG程序内部结构的大小限制从64K提升到了16M。这让DS,数组更具实用性。例如,交易程序的PARM,通常是输入接口复合DS,输出接口复合DS,遇到数组时64K就不够用。V7R1,V7R2也有不少改变,特别是V7R2,完善了自由格式,可以让H,F,D等全部拥有了自由格式写法,并且不需要/FREE,/END-FREE标识符即可自由格式固定格式混用,真是不错的选择。当时详细分析了6.1,7.1,7.2的语法改进,下面介绍下不同版本在开发上的重要改进。
7.2
CL语言
对字符串新增了6个函数,%CHECK,%CHECKR,%SCAN,%TRIM,%TRIML,%TRIMR。
新增6个转换函数,%CHAR,%DEC,%INT,%UINT,%LOWER,%UPPER。
新增2个大小函数,%LEN,%SIZE。
是不是CL中处理方便多了?可惜在7.2才能用,6.1只能看看了。
C/C++语言
没有什么需要关注的改动。
RPG语言
放松对IO输入输出结构的要求。使用*ALL可以让LIKEREC结构可以用在读写等任何IO操作上。这点非常有用,以后介绍LIKEREC时候再详细比较。
增加了CTL-OPT写法,用于自由格式H表定义。
增加了DCL-F写法,用于自由格式F表定义。
增加了DCL-C, DCL-DS, DCL-PI, DCL-PR, DCL-S写法,用于自由格式D表定义。
增加了DCL-PROC写法,用于子过程定义。
不再要求/FREE,/END-FREE,自由格式和固定格式可以任意混合编写。
%SUBDT增加参数,使得可以指定返回几位数字,例如%SUBDT(MyDate:*YEARS:4)。
timestamp类型可以保存秒以下12位小数(纳秒?),相应的%TIMESTAMP也增加了参数用于指定小数位数。
7.1
CL语言
可以使用RTVCLSRC从目标对象来获取ILE CL的源代码了。不过要求编译时ALWRTVSRC参数指定为*YES。
INT,UINT类型长度可以扩展到8字节。
可以在编译程序时,用DBGENCKEY,使得只有输入正确的KEY,才能看到源码视图。(这个,嘿嘿)
CL中的INCLUDE支持嵌套了。
C/C++语言
没有什么需要关注的改动。
RPG语言
SORTA和%LOOKUP可以依据DS结构的某一个字段,来排序或检索数组啦。例如:SORTA custDs(*).amount_owing; elem = %LOOKUP("K" : custDs(*).account_status);
SORTA可以用(A),(D)来正序,逆序排序数组。
增加了%SCANRPL函数,用于将一个字符串中的子串,替换为制定的字符串。(报错信息替换的神器啊,可惜V6R1不能用)
可以在编译程序时,用DBGENCKEY,使得只有输入正确的KEY,才能看到源码视图。
6.1
CL语言
增加CLOSE语句,可以关闭RCVF打开的文件,用于多次读取一个文件的场景。
增加INCLUDE语句,包含另外CL一个源文件。
C/C++语言
没有什么需要关注的改动。
RPG语言
文件定义时候可以指定QUALIFIED,记录格式名变成MYFILE.MYFMT,避免文件内字段名字对程序全局字段的名字污染。但文件操作必须使用DS结构。这点稍后会详细介绍。
EXTDESC和EXTFILE(*EXTDESC),使得可以编译期不再需要绑定文件描述,而使用字符串形式的'LIBNAME/FILENAME',运行期再去打开文件。
EXTNAME可以使用字符串形式'LIBNAME/FILENAME',同样不需要编译器绑定文件。
扩大DS,可变字符串等的最大限制,大小扩到16M。可变字符串的VARYING关键字允许指定2或4字节存放长度,%ADDR(varying : *DATA)可以获取到除去长度后的数据位置指针。
DIM和OCCURS数组的最大限制,元素个数扩充到16M个,但总大小不超过16M。
字符串常量大小扩到16k。
TEMPLATE关键字可用于文件定义和结构定义,不占用存储空间,通常为了LIKEFILE,LIKE,LIKEDS使用。TEMPLATE DS可以有INZ定义,方便参照它的结构使用INZ(*LIKEDS)来初始化。
阅读(3383) | 评论(0) | 转发(2) |