MainFrame小结(20110812)--MOVE ALL与INITIALIZE(cobol)

MOVE ALL

上次说到MOVE字符类型(alphanumeric)是按左对齐原则的,但如果我想不断重复填充相同的字符呢?那就要用MOVE ALL了,比如MOVE ALL SPACE TO WS-A,那么WS-A空间将会全被填充为空格。

MOVE ALL有几个特性:

MOVE ALL后面的常量只能是一个字符。

MOVE ALL后面跟的只能是COBOL定义的常量(如SPACEZERO等等)和字面常量(就是单双引号中的字符,如'A','*')。MOVE ALL后面不能跟数据项,比如MOVE ALL WS-B TO WS-A,是不允许的。但有一种替代的方法,就是使用INSPECT,如INSPECT WS-A REPLACING CHARACTERS BY WS-BWS-A将从左到右不断用WS-B填充(WS-B必须是一个字节的)。

对于COBOL定义的常量(如SPACEZERO等等),MOVE COBOL常量】等同于MOVE ALL COBOL常量】。


例:

---1----+----2----+----3----+----4----+----5----+

   05 WS-A        PIC X(5)       VALUE 'ABCDE'.

   05 WS-B        PIC X(1)       VALUE 'B'.

*    1.after move all zero

     MOVE ALL ZERO       TO WS-A

     DISPLAY WS-A

*    2.after move all 'A'

     MOVE ALL 'A'         TO WS-A

     DISPLAY WS-A

*    3.after replace by 'B'

     INSPECT WS-B REPLACING CHARACTERS BY WS-B

     DISPLAY WS-A


结果:

00000 

AAAAA

BBBBB



INITIALIZE

INITIALIZE非常简单,就如你想的那样。初始化一个组合项,下面的子项:字母型(alphabet)和字符类型(alphanumeric)将被初始化为空格。数值型(numeric)将被初始化为0。编辑型(alphanumeric-edit)中占位的字符部分,如加号、点号等就初始为加号,点号,而数值部分初始为0

值得注意的一点是FILLER和没有名字的数据项,INITIALIZE将不对他们进行操作。原因在于很多时候我们定义FILLER和没有名字的数据项都是为了不再改变他们的值。如果想改变他们还是有办法的,比如使用MOVE ALL SPACE TO WS-A,那么下面的FILLER和没有名字的数据项就变成空格了,或者算好他们的起始位置和长度,然后使用 MOVE WS-B TO WS-AWS-STARTWS-LEN)覆盖他们的值。


例:

---1----+----2----+----3----+----4----+----5----+

   05 WS-GROUP.

     10 WS-A      PIC X(2)       VALUE 'AB'.

     10 WS-B      PIC 9(2)       VALUE '12'.

     10 WS-C      PIC +9.9       VALUE '+3.4'.

     10 FILLER    PIC X          VALUE ','.

     10            PIC X           VALUE '*'.

*    1.original

     DISPLAY WS-GROUP

*    2.after init,filler and no name item would not

*    override

     INITIALIZE WS-GROUP

     DISPLAY WS-GROUP

*    3.move space to WS-GROUP,then init it.

     MOVE ALL SPACE       TO WS

     INITIALIZE WS-GROUP

*    4.override filler and no name item,then init it

     MOVE ','              TO WS-GROUP(9:1)

     MOVE '*'              TO WS-GROUP(10:1)

     INITIALIZE WS-GROUP


结果:

AB12+3.4,*

bb00+0.0,*

bb00+0.0bb

bb00+0.0,*


b表示空格(x'40')

posted @ 2011-08-13 16:05  小冰  阅读(2912)  评论(0编辑  收藏  举报