等多个文件中文abap教程第007章控制_第1页
等多个文件中文abap教程第007章控制_第2页
等多个文件中文abap教程第007章控制_第3页
等多个文件中文abap教程第007章控制_第4页
等多个文件中文abap教程第007章控制_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SAP AG 7: 错误!未定义书签。 错误!未定义书签。控制 ABAP/4 程序流概览内容ABAP/4中 流控制的概 念.编程逻辑表 达式.比较所有的 字段类型.比较字符串 和数字串.二进制位结 构的比较.检查字段是 否属于某一 范围.检查初始值.检查选择条 件.组合几个逻 辑表达式.编程分支和 循环.使用 IF 的条件分支.使用 CASE 的条件分支.使用 DO 的无条件循 环.使用 WHILE 的条件循环.终止循环.要根据一定 条件执行程 序组件,或 要将重复语 句序列组合 在循环中, 可以使用 ABAP/4 提供的用于 控制程序流 的标准关键 字。ABAP/4 也包含重要 的附加特征

2、。ABAP/4 程序流可以控制和 外部控制。 ABAP/4 程序流的控制和外 部控制之间 的差别在ABAP/4中 流控制的概 念 (页 错误!未定义书签。) 中 解释。流控 制。为此, 可使用其他 编程语言( 例如,C、 FORTRAN、 PASCAL 等本节主要等)中熟 悉的标准控 制关键字。下列描 述错误!未定义书签。ABAP/4中 流控制的概 念与其他高级 编程语言一 样(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的标准关键 字。这些关 键字用于_分支 (IF、CASE)循环 (DO、WHILE)然而,ABAP/4 与其他编程 语言不同之

3、处在于其具 有程序流的控制和 外部控制。_控制 由上述标准 关键字引导 。在程序代 码中对其进 行定义。外部控制 由事件引导 。事件由 ABAP/4 程序(系统 程序或用户 程序)或者 交互式用户 输入(例如 ,使用鼠标 在屏幕上单 击)生成。 系统不必按 ABAP/4 程序中列出 的顺序对进 行语句处理 。这使得 ABAP/4 成为事件驱 动编程语言 ,类似于的Visual Basic。时间事件和 ABAP/4 程序的连接由事件关键 字提供。ABAP/4 程序中的每 个语句都属 于特别的事件关键字。 即使在程序 中没有指定 任何事件关 键字,所有 语句都自动 归属于标准 事件关键字(STAR

4、T-OF-SELECTION) ,与程序中 事件语句的 次序完全不 相干。SAP AG所有属于某 一特定事件 关键字的语 句形成一个 处理块。处 理块是一个 在事件发生 时执行的模块。处理块 内的程序流 依赖于定义的顺 序处理。ABAP/4 程序常规结 构如下:控制。系统 按顺序处理 语句,或按 照前面提到 的标准关键 字关于外部控 制的详细信 息,如事件 及其如何与 ABAP/4 程序相互作 用的信息, 参见 C通过事件 控制 ABAP/4 程序流。该节说明如 何使用外部 控制控制处 理块内的程 序流。要控制 ABAP/4 程序中的流,请遵 循结构化编 程原则并将 程序模块划 分为单个逻 辑

5、相关语句 块(这些组 成控制结构 )。其中的 每个语句块 都执行务的一部分 。可以用 IF、CASE、 DO 和 WHILE 之类的关键 字控制处理 块中不同语 句之间的程 序流。这些 语句允许编 制条件和无 条件的分支 和循环。条 件使用逻辑 表达式,可 以是真,也 可以为假。错误!未定义书签。编程逻辑表 达式使用条件控 制程序中的流。要 用公式指定 条件,请使 用比较数据 字段的逻辑 表达式,如 下所示:语法. .该表达式比 较两个字段 。可能为真 ,也可能为 假。在带关 键字 IF、 CHECK 和 WHILE 的条件语句 中使用逻辑 表达式。根据操作数 和 的数据类型 ,可以使用 不同

6、的逻辑 运算符。允 许进行:要使程序易 于阅读,应 该缩排控制 结构中的语 句块。出于 布局需要, 可以使用 ABAP/4 编辑器功能 “编辑 - 语句.” 和“程序 - 整齐打印程 序”(详细 信息,参见 ABAP/4 程 序布局 (页 26)。假设当用户 选择一行后 ,生成列表 且提供一些 细分设备的 报表程序必 须作出反应 (详细信息 ,参见 交互列表)。需要为 该事件处理 的代码必须 事件关 键字 ILECTION之后。AT LILECTION. MOVE X TO FLAG.无论何时用 户通过单击 鼠标或按 F2 键在列表中 选择一个项 目时, ILECTION 和下一个事 件关键字

7、之 间的所有语 句将被处理SAP AG除上述比较 之外,还可 以执试:试 以检查数据 字段是否完 全满足一定 条件。可以 使用这些测另外,可以 将几个逻辑 表达式组合 为一个简单 逻辑表达式 。错误!未定义书签。比较所有的 字段类型要比较所有 的字段类型 ,可以在逻 辑表达式中 使用下列运 算符:操作数可以 是数据库字 段、字 段、文字或 常数。除基本字段 外,还可以 将结构数据 类型和上表 中的运算符 结合起来作 为操作数。字段串逐个 组件进行比 较,嵌套的 结构分为基 本的字段。关于比较内 表的详细信 息,参见 比较内表 (页 Error!Not a valid link.) 。如果有意义

8、 ,可以对不 同数据类型 的字段进行 比较。如果 字段可转换 ,就可以进 行比较。在 比较之前, 系统将按照 下列层次规 则执行自动 类型转换( 参见 键入转换 (页 636) ):1.2.3.如果 操作数之一 是浮点数( 类型 F),则系 统将其它操 作数转换为 类型 F。 如果 操作数之一 是压缩字段 (类型 P),则系 统将其它操 作数转换为 类型 P。如果 操作数之一 是日期字段 (类型 D)或时间 字段(类型 T),则系 统将其它操 作数转换为 类型 D 或 T。不支持 日期和时间 字段之间的 比较,这会 导致程序中 断。如果 操作数之一 是字符字段 (类型 C)且其它 操作数是十

9、六进制字段 (类型 X),则系 统将类型 X 的操作数转 换为类型 C。如果 操作数之一 是字符字段 (类型 C),其它 操作数为数 字字段(类 型 N),则系 统将这两种 操作数都转 换为类型 P。4.5.含 义EQ等于=等于NE不 等于不 等于不 等于LT小于 小于LE小 于等于大于GE大 于等于=大 于等于SAP AG错误!未定义书签。比较字符串 和数字串要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。因为除类型 N 和 C 外,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的比较时 ,操作数应 该是类型 N 或 C。运

10、算符的功 能如下:含 义CO仅包 含CN不仅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串CP包含模 式NP不包 含模式DATA: FTYPE F VALUE 100.00,PTYPE P VALUE 50.00 DECIMALS 2, ITYPE I VALUE 30.00.WRITE The following logical express are true:. IF F = P .WRITE: / F,=,P. ELSE.WRITE: / F,=50.0030 NE50.00这里,在 IF 语句中使用 两个逻辑表 达式。如果 逻辑表达式 为真,则屏 幕上显示出

11、来。如果逻 辑表达式为 假,则将相 反表达式显 示在屏幕上 。SAP AGCO (仅包含)如果 仅包含 中的字符, 则逻辑表达 式 CO 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FD包括 的长度。如 果为假,则 SY-FD移量 。包含 中第一个未 在 内出现的字 符的偏CN (不仅包含 )如果 还包含 之外的其他 字符,则逻 辑表达式 CN 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FD包含 中第一个未 同时在 中出现的字 符的偏移量 。如果为假 ,SY-FD长度。包含 的CA (包含任何 )如果 至

12、少包含 的一个字符 ,则逻辑表 达式 CA 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FD包含 中第一个也在 中出现的字 符的偏移量 。如果为假 ,SY-FD包含 的长度。NA (不包含任 何)如果 不包含 的任何字符 ,则逻辑表 达式 NA 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FD包含 的 长度。如果 为假,则 SY-FD包含 中在 内出现的第 一个字符的 偏移量。CS (包含字符 串)如果 包含字符串 , 则逻辑表达 式 CS 为真。忽略 尾部空格并 且比较不区 分大小写。 如果比较结 果为真,则 系统字段 SY-FD包含 在

13、中的偏移量 。如果为假 ,SY-FD包含 的长度。NS (不包含字 符串)如果 不包含字符 串 , 则逻辑表达 式 NS 为真。忽略 尾部空格且 比较不区分 大小写。如 果比较为真 ,系统字段 SY-FD包含 的长度。如 果为假,系 统字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 则逻辑表达 式 CP 为真。如果 属于类型 C,则可以 在 中使用下列 通配符:_* 用于任何字 符串+ 用于任何单 个字符SAP AG忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 系统字段 SY-FD包含 在 中的偏移量 。如果为假 ,SY-FD包含 的长度。如果要对

14、 中的特殊字 符进行比较 ,请将换码 字符 # 放到其前面 。可以使用 换码字符 # 指定_大小写字 符通配符 *(输入 #*)通配符 + (输入 #+)换码符号 本身 (输入 #)字符串结 尾的空格 (输入 # )NP (不包含模 式)如果 不包含模式 , 则逻辑表达 式 NP 为真。在中 ,可以使用 与 CP 相同的通配 符和换码字 符。忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 则系统字段 SY-FD包含 . 的长度,如 果为假,SY-FD包含 在 中的偏移量 。ResultSY-FDBD COABCD 真5BD COABCDE假2ABC12CNABCD 真3ABABCC

15、NABCD 假5ABcdeCABd真1ABcdeCAbD假5ABAB NAAB假0ababaNAAB真5ABcdeCSbC真1ABcdeCSce假5ABcdeNSbC假1ABcdece真5DATA: F1(5) TYPE C VALUE ,F2(5) TYPE C VALUE .IF F1 F2.WRITE: / Comparison true, SY-FD=, SY-FD. ELSE.WRITE: / Comparison false, SY-FD=, SY-FD. ENDIF.下表列出该 程序的执行 结果,取决 于所用的运 算符和 F1 / F2 字段。SAP AG错误!未定义书签。二进制

16、位结 构的比较要将逻辑表 达式初始操 作数第一字 节的二进制 位结构与第 二操作数的 进行比较, 请使用下列操作符。第二 操作数的长 度应为一个 字节。没有必要对 第二操作数 使用长度为 1 的十六进制 字段(类型 X),但却 较方便,因 为其长度为 一个字节且 数字值直接 与二进制位 结构相关。操作符功能 如下:O (二进制位 是 1)如果 中二进制位 是 1 的位置,在 中是 1,则逻辑 表达式 O 为真。Z (二进制位 是0)如果 中二进制位 是 1 的位置,在 中是 0,则逻辑 表达式 Z 为真。M (混合二进 制位)如果从 中二进制位 是 1 的位置起, 中至少一个 是 1,一个是

17、0,则逻辑 表达式 M 为真。DATA: C VALUE C, HEXDEC TYPE X, I TYPE I.含 义O二进制 位是 1Z二进制 位是 0M混合二 进制位ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AG进制进制二进制 位结构00000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二进制位结 构由其 ASCII 码 67 为当前硬件进行定 义。与用户 看到的一样 ,列表输出 中出现的数

18、 字,填写 1 的二进制位 位置与 67 的二进制位 结构一样。HEXDEC = 0.DO 256 TIMES. I = HEXDEC.IF C O HEXDEC.WRITE: / HEXDEC, I. ENDIF.HEXDEC = HEXDEC + 1.ENDDO.产生下列输 出:0000110220334064416542664367这里,使用 运算符 O 将字符C 的二进制位 结构与所有 0与 FF(10 进制为 255)之 间的 16 进制数进行 比较。HEXDEC 的10 进制值 I ,在HEXDEC 分配到I 期间,通过 使用自动类 型转换确定 。如果比较 结果为真, 则在屏幕上

19、显式 进制数及其 进制值。下表列出这些 数的二进制 位结构。SAP AG错误!未定义书签。检查字段是 否属于某一 范围要检查值是 否属于特定 范围,请使 用下列带有 BETN 参数的逻辑 表达式:语法. BETN AND .如果 在 和 之间的范围 内发生,则 表达式为真 。它是下列 逻辑表达式 的短格式:IF GE AND LE .错误!未定义书签。检查初始值要检查字段 是否设置为 初始值,请 如下使用带 有 IS INITIAL 参数的逻辑 表达式。语法. IS INITIAL .如果 包含本身类 型的初始值 ,则表达式 为真。通常 情况下,任 何字段,基 本的或结构 化的(字符 串和内表

20、) ,在 CLEAR 语句执行后 ,都包含其 初始值(参 见 重置缺省值 (页 610) )。DATA FLAG VALUE X. IF FLAG IS INITIAL.WRITE / Flag is initial.ELSE.WRITE / Flag is not initial.ENDIF. CLEAR FLAG.IF FLAG IS INITIAL.WRITE / Flag is initial.DATA: NUMBER TYPE I, FLAG.NUMBER = .IF NUMBER BETN 3 AND 7.FLAG = X.ELSE.FLAG = .ENDIF.这里,如果 NUMB

21、ER 的内容在 3 和 7 之间出现, 字段 FLAG 设置为“X” 。 SAP AG错误!未定义书签。检查选择条 件要检查字段 内容是否与 选择表中的 选择条件匹 配,可以如 下使用带有 IN 参数的逻辑 表达式:语法. IN .如果字段 内容的符合 选择表 中的条件, 则表达式为 真。关于选择条 件的详细信 息,参见 使用选择标准。关于逻辑表 达式中检查 选择条件的 详细信息, 包括示例, 参见 使用逻辑表达式中的选择表。错误!未定义书签。组合几个逻 辑表达式通过使用逻 辑连接运算 符 AND、OR 和 NOT,可 以将几个逻 辑表达式组 合为单个表 达式:_要将几个 逻辑表达式 组合为单

22、个 表达式,且 该表达式仅 当所有组件 表达式为真 时才为真,则表达式之 间要用 AND 连接。要将几个 逻辑表达式 组合为单个 表达式,且 只要其中一 个组件表达 式为真时, 该表达式即为真,则表 达式之间要 用 OR 连接。要转化逻 辑表达式的 结果,请在 其前面指定 NOT。_NOT 优先于 AND,AND 优先于 OR。但是 ,可以用任 何括弧组合 指定处理顺 序。由于 ABAP/4将括弧解释 为单字,前 面或后面必 须至少有一 个空格。ABAP/4 从左到右处 理逻辑表达 式。如果确 定组件表达 式之一是真 或假,就不 再执行该组 件中其余的 比较或检查 。这意味着 采取这种方 法组

23、织逻辑 表达式可以 提高性能, 就是将经常 为假的比较 放置在 AND 链的开头, 而将费时的 比较,如字 符串查找放 等到最后。DATA: FTYPE F VALUE 100.00, N(3) TYPE N VALUE 123, C(3) TYPE C VALUE 456.WRITE The following logical expresis true:. IF ( C LT N ) AND ( N GT F ).WRITE: / (,C,lt,N,) AND (,N,gt,F,).ELSE.WRITE: / (,C,ge,N,) OR (,N,le,F,).ENDIF.这产生如下 输出:

24、ELSE.WRITE / Flag is not initial.ENDIF.这产生如下 输出: Flag is not initial Flag is initial.这里,DATA 语句之后, 字符串 FLAG 不包含初始 值,因为用 VALUE 参数设置为 X。执 行 CLEAR 语句之后, 将其重置为 初始值。SAP AG错误!未定义书签。编程分支和 循环可以在程序 中定义条件 和无条件分 支和循环。 为此,ABAP/4 提供了几个 在下列语 句。分支循环中描述的错误!未定义书签。使用 IF 的条件分支IF 语句允许依 据条件将程 序流转到特 定的语句块 中。该语句 块包括 IF 语句

25、及其后 面的ELSEIF、 ELSE 或 ENDIF 之间的所有 命令。语法IF.EIFs EIFs.E.s ENDIF. ement block. ement blockement block如果第一个 条件是真, 系统将执行 所有语句直 到第一个语 句块结束, 然后继续处 理 ENDIF 语句之后的 程序。要采 用选择性条 件,可以使 用 ELSEIF 语句。如果 第一个条件 是假,系统 使用与 IF 语句一样的 方式处理后 面的 ELSEIF 语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句 块。最后的 语句块必须 用 ENDIF 结束。要用公式表 达 IF

26、 和 ELSEIF 语句中的条 件,可以使 用任何 编程逻辑表 达式 (页 错误!未定义书签。) 描述的逻辑 表达式。DATA: TEXT1(30) VALUE This is thetext, TEXT2(30) VALUE This is the second text,ABAP/4 允许无限地 嵌套 IF - ENDIF 语句块,但 是必须在相 同的处理块 中终止。换 句话说,就是 IF - ENDIF 块不能包含 事件关键字 。下列逻辑表达式为真:( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 语句中使用 逻辑表

27、达式 。如果逻辑 表达式为真 ,则将其在 屏幕上显示 出来。如果 为假,则屏 幕上出现相 反的表达式 。SAP AG错误!未定义书签。使用 CASE 的条件分支要根据特殊 数据字段的 内容执行不 同的语句块 ,可以如下 使用 CASE 语句:语法CASE .WHEN .sement WHEN .sement WHEN .sement WHEN .WHEN OTHERS.blockblockblock系统执行 WHEN 语句之后的 语句块,如 果 内容等于的内容,且 继续处理 ENDCASE语句后面的 语句。如果 的内容不等 于的内容,则 执行选项 WHEN OTHERS 后面的语句 块。最后的

28、 语句块必须 用 ENDCASE 结束。使用 CASE 的条件分支 是带 IF 的类似处理 的短格式:= .ement block = .ement block = .ement block = .IF s ELSEIFs ELSEIFs ELSEIF. ELSE.TEXT3(30) VALUE This is the third text, STRING(5) VALUE eco.IF TEXT1 CS STRING.WRITE / Condition 1 is fulfilled.ELSEIF TEXT2 CS STRING.WRITE / Condition 2 is fulfilled

29、.ELSEIF TEXT3 CS STRING.WRITE / Condition 3 is fulfilled.ELSE.WRITE / No condition is fulfilled.ENDIF.产生如下输 出:Condition 2 is fulfilled.这里,第二 个逻辑表达 式 TEXT2 CS STRING 是真,因为 字符串“eco” 存在于 TEXT2 中。SAP AG错误!未定义书签。使用 DO 的无条件循 环如果想要多 次执行语句 块,则可以 如下使用 DO 语句编程循 环:语法DO TIMES VARYING FROM NEXT . ENDDO.在发现 EXIT、

30、 STOP 或 REJECT 语句之前, 系统继续执 行由 DO 引导、ENDDO 结束的语句 块(参见 终止循环 (页 错误!未定义书签。) )。可以使用 TIMES 选项限制循 环次数。 可以是文字 或变量。如 果 是 0 或负数,系 统不执行该 循环。系统字段 SY-INDEX 中包含已处 理过的循环 次数。使用 DO 语句时要避 免死循环。 如果不使用 TIMES 选项,则在 语句块中至 少应包含一 个EXIT、 STOP 或 REJECT 语句,以便 系统能够退 出循环。DATA: TEXT1 VALUE X, TEXT2 VALUE Y, TEXT3 VALUE Z, STRING

31、 VALUE A.CASE STRING. WHEN TEXT1.WRITE: / String is, TEXT1.WHEN TEXT2.WRITE: / String is, TEXT2.WHEN TEXT3.WRITE: / String is, TEXT3.WHEN OTHERS.WRITE: / String is not, TEXT1, TEXT2, TEXT3.ENDCASE.产生如下输 出:String is not X Y Z这里,执行 WHEN OTHERS 后面的语句 块,因为 STRING 的内容“A” 不等于“X” 、“Y”或 “Z”,。在 ABAP/4 中,可以嵌

32、套 CASE - ENDCASE 块,且可以 与 IF - ENDIF 结合使用, 但必须在同 一处理块中 终止。SAP AG可以任意嵌 套 DO 循环,也可 以与其他循 环组合使用 。可以使用 VARYING 选项在每次 循环中给变 量 重新赋值。 、 、 、 . 必需是内存 中类型相同 和长度相等 的一系列等 距字段。第 一次循环中 ,将 分配给 ,第 二次循环中 ,将 分配给 ,以 此类推。可 以在一个 DO 语句中使用 多个 VARYING 选项。如果在 DO 循环中改变 控制变量 ,则 系统将自动 改变相应的 字段。应保证循环 次数不超过 涉及到的变 量 、 、 的数量。本例显示 2

33、 个嵌套循环 ,都使用 TIMES 选项。DO 2 TIMES.WRITE SY-INDEX. SKIP.DO 3 TIMES.WRITE SY-INDEX. ENDDO.SKIP. ENDDO.产生如下输 出:11232123外部循环执 行 2 次。每次执 行外部循环 时循 环都执行 3 次。注意系 统字段 SY-INDEX每个循 环各自的循 环次数。本例显示 DO 循环的基本 格式。DO.WRITE SY-INDEX.IF SY-INDEX = 3.EXIT. ENDIF.ENDDO.产生如下输 出:123这里,处理 3 次循环,然 后在 EXIT 语句后退出 循环。SAP AG错误!未定

34、义书签。使用 WHILE 的条件循环如果只要条 件为真,就 不止一次执 行语句,可 以如下使用 WHILE 语句编程:语法WHILE VARY FROM NEXT . ENDWHILE.只要 是真,或系 统发现 EXIT、 STOP 或 REJECT 语句,系统 将继续执行 由 WHILE语句引导、 ENDWHILE 结束的语句 块(参见 终止循环 (页 错误!未定义书签。) )。对于 , 可以使用 编程逻辑表 达式 (页 错误!未定义书签。) 中描述的任 何逻辑表达 式。系统字段 SY-INDEX 中包含已执 行的循环次 数。可以任意嵌 套 WHILE 循环,也可 与其他循环 结合使用。WH

35、ILE 语句的 VARY 选项与 DO 循环的 VARYING 选项工作方 式一样(参 见使用 DO 的无条件循 环 (页 错误!未定义书签。) )。允许 每次执行循 环时为变量 重新赋值。、 . 必需是内存 中类型相同 和长度相等 的一系列等 距字段。第 一次循环时 ,将 分配给 ,第 二次循环时 ,将 分配给 ,以 此类推。可 以在一个 WHILE 语句中使用 多个 VARY 选项。该示例说明 如何在 DO 循环中使用 VARYING 选项。DATA: BEGIN OF TEXT, WORD1(4) VALUE This, WORD2(4) VALUE is, WORD3(4) VALUE

36、 a, WORD4(4) VALUE loop, END OF TEXT.DATA: STRING1(4), STRING2(4).DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.WRITE STRING1.IF STRING1 = is. STRING1 = was.ENDIF. ENDDO.SKIP.DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3 VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.WRITE

37、: STRING1, STRING2.ENDDO.这产生如下 输出:This isaloopThis was aloop字段串 TEXT 代表内存中 四个等距字 段序列。每 次执行第一 个 DO 循环时,都 依次将其组件分配到 STRING1 中。如果 STRING1 包含“is” ,则将其改 变为“was” ,而且自动 将 TEXT-WORD2 改变为“was”。每次执行 第二个 DO 循环时,将 TEXT 的组件传递 给STRING1和 STRING2。SAP AG错误!未定义书签。终止循环要终止循环 过程,请使 用下列关键 字之一。关 键字用途无 条件 终止 循环 过程 (页错误!未 定

38、义 书签。)CONTI NUE有 条件 终止 循环 过程 (页DATA: LENGTHTYPE I VALUE 0, STRLTYPE I VALUE 0,STRING(30) TYPE C VALUE Test String.STRL = STRLEN( STRING ). WHILE STRING NE SPACE.WRITE STRING(1). LENGTH = SY-INDEX. SHIFT STRING.ENDWHILE.WRITE: / STRLEN:, STRL.WRITE: / Length of string:, LENGTH.产生如下输 出:T e s tS t r i

39、n gSTRLEN:11Length of string:11此处使用 WHILE 循环确定字 符串的长度 。做法是: 每次执行循 环时,都将 字符串 一位,直到 仅包含空格 。选择本例 主要是为了 说明 WHILE 语句。但是 ,确定字符 串长度更简 便和有效的 办法是通过 使用内置的 函数 STRLEN, 这在示例中 也可看出。使用 WHILE 语句要避免 死循环。请 记住,在一 段时间之后 ,WHILE 语句条件应 变为假,或 者系统能够 找到 EXIT、 STOP 或 REJECT 语句退出循 环。SAP AG以下说 明如何在 DO 和WHILE 循环以及下 列循环中使 用 CONTI

40、NUE、 CHECK 和 EXIT:_LOOP - ENDLOOP 循环,用于 处理内表( 参见 循环处理 (页 Error! Not a valid link.) )。_SELECT - ENDSELECT 循环,用于 从数据表中( 参见 从几行选择所有数据)。数据错误!未定义书签。无条件终止 循环过程要立即无条 件终止循环 ,请如下使 用 CONTINUE 语句:语法CONTINUE.在CONTINUE 语句之后, 系统跳过当 前语句块中 所有剩余语 句块,继续 该语句后面 的循环。DO 4 TIMES.IF SY-INDEX = 2.CONTINUE. ENDIF.WRITE SY-IN

41、DEX. ENDDO.产生如下输 出:134此处系统不 处理 WRITE 语句就终止 第二次循环 。在循环中只 能使用 CONTINUE, 但在循环外 还可使用关 键字 CHECK 和 EXIT, 分别完成不 同的功能。 例如,可以 终止子程序 或整个程序 块。关于 CHECK 和 EXIT 语句及其如 何在循环外 使用的详细 信息,参见终止子系统 和 终止处理块 。错误!未 定义 书签。)CHEC K完 全终 止循 环 (页 错误!未定 义书签。EXIT)SAP AG错误!未定义书签。有条件终止 循环过程要有条件终 止循环过程 ,请如下使 用 CHECK 语句:语法CHECK .如果条件是

42、假,系统跳 过当前语句 块中所有剩 余语句块, 继续后面的 循环过程。 对于, 可使用 编程逻辑表 达式 (页 错误!未定义书签。) 中描述的任 何逻辑表达 式。错误!未定义书签。完全终止循 环要无条件完 全终止循环 ,请如下使 用 EXIT 语句:语法EXIT.EXIT 语句之后, 系统立即退 出循环,继 续结束语句 (ENDDO、 ENDWHILE、 ENDSELECT)后 面 的处理。 在嵌套循环 中,系统仅 退出当前循 环。DO 4 TIMES.IF SY-INDEX = 3.EXIT. ENDIF.WRITE SY-INDEX. ENDDO.产生如下输 出:12此处系统不 处理 WR

43、ITE 语句或第四 个循环过程 ,就在第三 个循环过程 中完全终止 循环。DO 4 TIMES.CHECK SY-INDEX BETN 2 and 3. WRITE SY-INDEX.ENDDO.产生如下输 出:23此处系统不 处理 WRITE 语句就终止 第一个和第 四个循环,因为 SY-INDEX 不在 2 和 3 之间。SAP AG 8:概览内容ABAP/4中 流控制的概 念.编程逻辑表 达式.比较所有的 字段类型.比较字符串 和数字串.二进制位结 构的比较.检查字段是 否属于某一 范围.检查初始值.检查选择条 件.组合几个逻 辑表达式.编程分支和 循环.使用 IF 的条件分支.使用 C

44、ASE 的条件分支.使用 DO 的无条件循 环.使用 WHILE 的条件循环.终止循环.要根据一定 条件执行程 序组件,或 要将重复语 句序列组合 在循环中, 可以使用 ABAP/4 提供的用于 控制程序流 的标准关键 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以控制和 外部控制。ABAP/4 程序流的控制和外 部控制之间 的差别在ABAP/4中 流控制的概念 (页本节主要错误!未定义书签。)中 解释。流控 制。为此, 可使用其他 编程语言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的标准控 制关键字。下列描 述错误!未定义书签。ABAP/4中 流控制

45、的概 念与其他高级 编程语言一 样(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的标准关键 字。这些关 键字用于_分支 (IF、CASE)循环 (DO、WHILE)然而,ABAP/4 与其他编程 语言不同之 处在于其具 有程序流的控制和 外部控制。_控制 由上述标准 关键字引导 。在程序代 码中对其进 行定义。外部控制 由事件引导 。事件由 ABAP/4 程序(系统 程序或用户 程序)或者 交互式用户 输入(例如 ,使用鼠标 在屏幕上单 击)生成。 系统不必按 ABAP/4 程序中列出 的顺序对进 行语ABAP/4的Visual Basic。句处理

46、 。这使得成为事件驱 动编程语言 ,类似于时间事件和 ABAP/4 程序的连接 由事件关键 字提供。ABAP/4 程序中的每 个语句都属 于特别的事 件关键字。即使在程序 中没有指定 任何事件关 键字,所有 语句都自动 归属于标准 事件关键字 (START-OF-SELECTION) ,与程序中 事件语句的 次序完全不 相干。所有属于某 一特定事件 关键字的语 句形成一个 处理块。处 理块是一个 在事件发生 时执行的模 块。处理块 内的程序流 依赖于 控制。系统 按顺序处理 语句,或按 照前面提到 的标准关键 字定义的顺 序处理。ABAP/4程序常规结 构如下:SAP AGSAP AG操作数可

47、以 是数据库字 段、字 段、文字或 常数。除基本字段 外,还可以 将结构数据 类型和上表 中的运算符 结合起来作 为操作数。 字段串逐个 组件进行比 较,嵌套的 结构分为基 本的字段。 关于比较内 表的详细信 息,参见 比较内表 (页Error! Not a valid link.)。如果有意义 ,可以对不 同数据类型 的字段进行 比较。如果 字段可转换 ,就可以进 行比较。在 比较之前, 系统将按照 下列层次规 则执行自动 类型转换( 参见 键入转换 (页 636) ):1.2.3.如果 操作数之一 是浮点数( 类型 F),则系 统将其它操 作数转换为 类型 F。 如果 操作数之一 是压缩字

48、段 (类型 P),则系 统将其它操 作数转换为 类型 P。如果 操作数之一 是日期字段 (类型 D)或时间 字段(类型 T),则系 统将其它操 作数转换D或 T。不支持 日期和时间 字段之间的 比较,这会 导致程序中 断。为 类型4.如果 操作数之一 是字符字段 (类型 C)且其它 操作数是十 六进制字段 (类型 X),则系 统将类型 X 的操作数转 换为类型 C。如果 操作数之一 是字符字段 (类型 C),其它 操作数为数 字字段(类 型 N),则系 统将这两种 操作数都转 换为类型 P。5.不 等于LT小 于小于LE小 于等于大于GE大 于等于=大 于等于SAP AG错误!未定义书签。比较

49、字符串 和数字串要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。因为除类型 N 和 C 外,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的比较时 ,操作数应 该是类型 N 或 C。运算符的功 能如下:CO (仅包含)如果 仅包含 中的字符, 则逻辑表达 式 CO 为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FD包括 的长度。如 果为假,则 SY-FD包含 中第一个未 在 内出现的字 符的偏移量 。CN (不仅包含 )如果 还包含 之外的其他 字符,则逻 辑表达式 CN 为真。该比

50、较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FD包含 中第一个未 同时在 中出现的字 符的偏移量 。如果为假 ,SY-FD包含 的长度。CA (包含任何 )如果 至少包含 的一个字符 ,则逻辑表 达式 CA 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FD包含 中第一个也 在 中出现的字 符的偏移量 。如果为假 ,SY-FD包含 的长度。NA (不包含任 何)如果 不包含 的任何字符 ,则逻辑表 达式 NA 为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FD SY-FD包含 中在 内出现的第 一个字符的 偏移量。

51、包含 的 长度。如果 为假,则CS (包含字符 串)如果 包含字符串 , 则逻辑表达 式 CS 含 义CO仅包 含CN不仅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串CP包含模 式NP不包 含模式这里,在 IF 语句中使用 两个逻辑表 达式。如果 逻辑表达式 为真,则屏 幕上显示出 来。如果逻 辑表达式为 假,则将相 反表达式显 示在屏幕上 。SAP AG为真。忽略 尾部空格并 且比较不区 分大小写。如果比较结 果为真,则 系统字段 SY-FD包含 在 中的偏移量 。如果为假 ,SY-FD包含 的长度。NS (不包含字 符串)如果 不包含字符 串 , 则逻辑表达 式

52、NS 为真。忽略 尾部空格且 比较不区分 大小写。如 果比较为真 ,系统字段 SY-FD包含 的长度。如 果为假,系 统字段 SY-FD包含 在 中的偏移量 。CP (包含模式 )如果 包含模式 , 则逻辑表达 式 CP 为真。如果 属于类型 C,则可以 在 中使用下列 通配符:_* 用于任何字 符串_+ 用于任何单 个字符忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 系统字段 SY-FD包含 在 中的偏移量 。如果为假 ,SY-FD包含 的长度。如果要对 中的特殊字 符进行比较 ,请将换码 字符 # 放到其前面 。可以使用 换码字符 # 指定_大小写字 符通配符 *(输 入 #

53、*)通配符 + (输入 #+)换码符号 本身 (输入 #)字符串结 尾的空格 (输入 # )NP (不包含模 式)如果 不包含模式 , 则逻辑表达 式 NP 为真。在中 ,可以使用 与 CP 相同的通配 符和换码字 符。忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 则系统字段 SY-FD包含 . 的长度,如 果为假,SY-FD包含 在 中的偏移量 。SAP AG错误!未定义书签。二进制位结 构的比较要将逻辑表 达式初始操 作数第一字 节的二进制 位结构与第 二操作数的 进行比较, 请使用下列 操作符。第二 操作数的长 度应为一个 字节。没有必要对 第二操作数 使用长度为 1 的十

54、六进制 字段(类型 X),但却 较方便,因 为其长度为 一个字节且 数字值直接 与二进制位 结构相关。操作符功能 如下:O (二进制位 是 1)如果 中二进制位 是 1 的位置,在 中是 1,则逻辑 表达式 O 为真。Z (二进制位 是0)如果 中二进制位 是 1 的位置,在 中是 0,则逻辑 表达式 Z 为真。M (混合二进 制位)如果从 中二进制位 是 1 的位置起, 中至少一个 是 1,一个是 0,则逻辑 表达式 M 为真。含 义O二进制 位是 1Z二进制 位是 0M混合二 进制位ABcdeCAbD假5ABAB NAAB假0ababaNAAB真5ABcdeCSbC真1ABcdeCSce假

55、5ABcdeNSbC假1ABcdece真5ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5SAP AGSAP AG错误!未定义书签。检查字段是 否属于某一 范围要检查值是 否属于特定 范围,请使 用下列带有 BETN 参数的逻辑 表达式:语法. BETN AND .如果 在 和 之间的范围 内发生,则 表达式为真 。它是下列 逻辑表达式 的短格式:IF GE AND LE .字 符C的 二进制位结 构由其 ASCII 码 67 为当前硬件进行定 义。与用户 看到的一样 ,列表输出 中出现的数 字,填写 1 的二进制位 位置与 67 的二进制位

56、 结构一样。SAP AG错误!未定义书签。检查选择条 件要检查字段 内容是否与 选择表中的 选择条件匹 配,可以如 下使用带有 IN 参数的逻辑 表达式:语法. IN .如果字段 内容的符合 选择表 中的条件, 则表达式为 真。关于选择条 件的详细信 息,参见 使用选择标准。关于逻辑表 达式中检查 选择条件的 详细信息, 包括示例, 参见 使用逻辑表达式中的选择表。错误!未定义书签。组合几个逻 辑表达式通过使用逻 辑连接运算 符 AND、OR 和 NOT,可 以将几个逻 辑表达式组 合为单个表 达式:_要将几个 逻辑表达式 组合为单个 表达式,且 该表达式仅 当所有组件 表达式为真 时才为真,

57、则表达式之 间要用 AND 连接。要将几个 逻辑表达式 组合为单个 表达式,且 只要其中一 个组件表达 式为真时, 该表达式即为真,则表 达式之间要 用 OR 连接。_要转化逻 辑表达式的 结果,请在 其前面指定 NOT。NOT 优先于 AND,AND 优先于 OR。但是 ,可以用任 何括弧组合 指定处理顺 序。由于 ABAP/4 将括弧解释 为单字,前 面或后面必 须至少有一 个空格。ABAP/4 从左到右处 理逻辑表达 式。如果确 定组件表达 式之一是真 或假,就不 再执行该组 件中其余的 比较比较 放置在 AND 链的或检查 。这意味着 采取这种方 法组织逻辑 表达式可以 提高性能, 就

58、是将经常 为开头, 而将费时的 比较,如字 符串查找放 等到最后。ELSE.WRITE / Flag is not initial.ENDIF.这产生如下 输出: Flag is not initial Flag is initial.这里,DATA 语句之后, 字符串 FLAG 不包含初始 值,因为用 VALUE 参数设置为 X。执 行 CLEAR 语句之后, 将其重置为 初始值。SAP AG错误!未定义书签。编程分支和 循环可以在程序 中定义条件 和无条件分 支和循环。 为此,ABAP/4 提供了几个 在下列中描述的语 句。分支循环错误!未定义书签。使用 IF 的条件分支IF 语句允许依

59、据条件将程 序流转到特 定的语句块 中。该语句 块包括 IF 语句及其后 面的 ELSEIF、 ELSE 或ENDIF 之间的所有 命令。语法.IFELSEIF. ement block. ement blocks ELSEIFs. ELSE.ENDIF.如果第一个 条件是真, 系统将执行 所有语句直 到第一个语 句块结束, 然后继续处 理 ENDIF 语句之后的 程序。要采 用选择性条 件,可以使 用 ELSEIF 语句。如果 第一个条件 是假,系统 使用与 IF 语句一样的 方式处理后 面的 ELSEIF 语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句 块。

60、最后的 语句块必须 用 ENDIF 结束。要用公式表 达 IF 和 ELSEIF 语句中的条 件,可以使 用任何 编程逻辑表 达式 (页 8) 描述的逻辑 表达 式。在本例中, 在 IF 语句中使用 逻辑表达式 。如果逻辑 表达式为真 ,则将其在 屏幕上显示 出来。如果 为假,则屏 幕上出现相 反的表达式 。SAP AG错误!未定义书签。使用 CASE 的条件分支要根据特殊 数据字段的 内容执行不 同的语句块 ,可以如下 使用 CASE 语句:语法CASE .WHEN .WHEN .WHEN .WHEN .WHEN OTHERS.ENDCASE.系统执行 WHEN 语句之后的 语句块,如 果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论