具有偏移量说明的静态 ASSIGN

ASSIGN <f>[+<o>][<l>] TO <FS>.

在ASSIGN语句中,偏移量的说明有下列特殊特征:

1.<o> 和 <l> 可以是变量


2.系统不检查所选部分是否位于字段 <f> 内部。偏移量 <o> 和长度 <l> 的 <f> 部分被分配给字段符号

<FS>。写地址时,可以超出 <f> 的限制,但不能超出所定义的内存区。


3.如果没有指定长度<l>,系统自动输入字段<f>的长度。如果<o>大于零,<FS>总是指向超出<f>限制的区域。


4.如果<o>小于<f>的长度,可以为<l>指定一个星号(*)来阻止<FS>参照<f>限制之外的区域。


例子:

FIELD-SYMBOLS <fs>.

DATA: BEGIN OF line,
       string1(10) VALUE '0123456789',
       string2(10) VALUE 'qwertfghij',
      END OF line.

WRITE / line-string1+5.

ASSIGN line-string1+5 TO <fs>.
WRITE / <fs>.

ASSIGN line-string1+5(*) TO <fs>.
WRITE / <fs>.


结果:


该示例中,可以看到WRITE语句和ASSIGN语句中的偏移量说明的区别。对于WRITE,在LINE-STRING端部截短了输出。
如果指定偏移量大于9,将导致语法检查时出错。在第一个ASSIGN语句中,将LINE-STRING中以偏移量5开头长度为10的内存
区域分配给字段符号<FS>。因为程序中明确定义了LINE-STRING1后面的内存区,所以这将导致“56789abcde”的输出结果。
在第二个ASSIGN语句中,避免了LINE-STRING1 边界后面的内存分配。


再来看一个例子:


FIELD-SYMBOLS <fs>.

DATA: BEGIN OF line,
        a VALUE '1', b VALUE '2', c VALUE '3', d VALUE '4',
        e VALUE '5', f VALUE '6', g VALUE '7', h VALUE '8',
      END OF line,
      off TYPE i,
      len TYPE i VALUE 2.

DO 2 TIMES.
  off = sy-index * 3.
  ASSIGN line-a+off(len) TO <fs>.
  <fs> = 'xx'.
ENDDO.

DO 8 TIMES.
  off = sy-index - 1.
  ASSIGN line-a+off(1) TO <fs>.
  WRITE <fs>.
ENDDO.
输出结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值