ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:98.18KB ,
资源ID:6195977      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6195977.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第七章 控制 ABAP4 程序流.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第七章 控制 ABAP4 程序流.docx

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

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

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

4、属于标准 事件关键字 (START-OF-SELECTION) ,与程序中 事件语句的 次序完全不 相干。所有属于某 一特定事件 关键字的语 句形成一个 处理块。处 理块是一个 在事件发生 时执行的模 块。处理块 内的程序流 依赖于内部 控制。系统 按顺序处理 语句,或按 照前面提到 的标准关键 字定义的顺 序处理。ABAP/4 程序常规结 构如下:假设当用户 选择一行后 ,生成列表 且提供一些 细分设备的 报表程序必 须作出反应 (详细信息 ,参见 交互列表)。需要为 该事件处理 的代码必须 插入事件关 键字 AT LINE-SELECTION 之后。AT LINE-SELECTION. M

5、OVE X TO FLAG. .无论何时用 户通过单击 鼠标或按 F2 键在列表中 选择一个项 目时,AT LINE-SELECTION 和下一个事 件关键字之 间的所有语 句将被处理关于外部控 制的详细信 息,如事件 及其如何与 ABAP/4 程序相互作 用的信息, 参见 C通过事件控制 ABAP/4 程序流。该节说明如 何使用外部 控制控制处 理块内的程 序流。要控制 ABAP/4 程序中的内 部流,请遵 循结构化编 程原则并将 程序模块划 分为单个逻 辑相关语句 块(这些组 成控制结构 )。其中的 每个语句块 都执行主任 务的一部分 。要使程序易 于阅读,应 该缩排控制 结构中的语 句块

6、。出于 布局需要, 可以使用 ABAP/4 编辑器功能 “编辑 - 插入语句.” 和“程序 - 整齐打印程 序”(详细 信息,参见 ABAP/4 程序布局 (页 26)。可以用 IF、CASE、 DO 和 WHILE 之类的关键 字控制处理 块中不同语 句之间的程 序流。这些 语句允许编 制条件和无 条件的分支 和循环。条 件使用逻辑 表达式,可 以是真,也 可以为假。7编程逻辑表 达式使用条件控 制程序中的 内部流。要 用公式指定 条件,请使 用比较数据 字段的逻辑 表达式,如 下所示:语法 . .该表达式比 较两个字段 。可能为真 ,也可能为 假。在带关 键字 IF、 CHECK 和 WH

7、ILE 的条件语句 中使用逻辑 表达式。根据操作数 和 的数据类型 ,可以使用 不同的逻辑 运算符。允 许进行:除上述比较 之外,还可 以执行测试 以检查数据 字段是否完 全满足一定 条件。可以 使用这些测 试:另外,可以 将几个逻辑 表达式组合 为一个简单 逻辑表达式 。7比较所有的 字段类型要比较所有 的字段类型 ,可以在逻 辑表达式中 使用下列运 算符:含 义EQ等于 =等于NE不 等于不 等于不 等于LT小 于小于LE小 于等于大于GE大 于等于=大 于等于操作数可以 是数据库字 段、内部字 段、文字或 常数。除基本字段 外,还可以 将结构数据 类型和上表 中的运算符 结合起来作 为操

8、作数。 字段串逐个 组件进行比 较,嵌套的 结构分为基 本的字段。 关于比较内 表的详细信 息,参见 比较内表 (页 Error! Not a valid link.) 。如果有意义 ,可以对不 同数据类型 的字段进行 比较。如果 字段可转换 ,就可以进 行比较。在 比较之前, 系统将按照 下列层次规 则执行自动 类型转换( 参见 键入转换 (页 636) ):1. 如果 操作数之一 是浮点数( 类型 F),则系 统将其它操 作数转换为 类型 F。2. 如果 操作数之一 是压缩字段 (类型 P),则系 统将其它操 作数转换为 类型 P。3. 如果 操作数之一 是日期字段 (类型 D)或时间 字

9、段(类型 T),则系 统将其它操 作数转换为 类型 D 或 T。不支持 日期和时间 字段之间的 比较,这会 导致程序中 断。4. 如果 操作数之一 是字符字段 (类型 C)且其它 操作数是十 六进制字段 (类型 X),则系 统将类型 X 的操作数转 换为类型 C。5. 如果 操作数之一 是字符字段 (类型 C),其它 操作数为数 字字段(类 型 N),则系 统将这两种 操作数都转 换为类型 P。DATA: F TYPE F VALUE 100.00, P TYPE P VALUE 50.00 DECIMALS 2, I TYPE I VALUE 30.00.WRITE The followin

10、g logical expressions are true:.IF F = P . WRITE: / F,=,P.ELSE. WRITE: / F,= 50.00 30 NE 50.00这里,在 IF 语句中使用 两个逻辑表 达式。如果 逻辑表达式 为真,则屏 幕上显示出 来。如果逻 辑表达式为 假,则将相 反表达式显 示在屏幕上 。7比较字符串 和数字串要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。含 义CO仅包 含CN不仅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串 CP包含模 式NP不包 含模式因为除类型 N 和

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

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

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

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

15、则系统字段 SY-FDPOS 包含 . 的长度,如 果为假,SY-FDPOS 包含 在 中的偏移量 。DATA: F1(5) TYPE C VALUE , F2(5) TYPE C VALUE .IF F1 F2. WRITE: / Comparison true, SY-FDPOS=, SY-FDPOS.ELSE. WRITE: / Comparison false, SY-FDPOS=, SY-FDPOS.ENDIF.下表列出该 程序的执行 结果,取决 于所用的运 算符和 F1 / F2 字段。ResultSY-FDPOSBD COABCD 真5BD COABCDE假 2ABC12CNAB

16、CD 真3ABABCCNABCD 假5ABcdeCABd 真1ABcdeCAbD 假5ABAB NAAB 假0ababaNAAB 真5ABcdeCSbC 真1ABcdeCSce 假5ABcdeNSbC 假1ABcdeNSce 真5ABcdeCP*b*真 1ABcdeCP*#b*假 5ABcdeNP*b*假 1ABcdeNP*#b*真 57二进制位结 构的比较要将逻辑表 达式初始操 作数第一字 节的二进制 位结构与第 二操作数的 进行比较, 请使用下列 操作符。含 义O二进制 位是 1Z二进制 位是 0M混合二 进制位第二 操作数的长 度应为一个 字节。没有必要对 第二操作数 使用长度为 1 的

17、十六进制 字段(类型 X),但却 较方便,因 为其长度为 一个字节且 数字值直接 与二进制位 结构相关。操作符功能 如下:O (二进制位 是 1)如果 中二进制位 是 1 的位置,在 中是 1,则逻辑 表达式 O 为真。Z (二进制位 是0)如果 中二进制位 是 1 的位置,在 中是 0,则逻辑 表达式 Z 为真。M (混合二进 制位)如果从 中二进制位 是 1 的位置起, 中至少一个 是 1,一个是 0,则逻辑 表达式 M 为真。DATA: C VALUE C, HEXDEC TYPE X, I TYPE I.HEXDEC = 0.DO 256 TIMES. I = HEXDEC. IF C

18、 O HEXDEC. WRITE: / HEXDEC, I. ENDIF. HEXDEC = HEXDEC + 1.ENDDO.产生下列输 出:00 001 102 203 340 6441 6542 6643 67这里,使用 运算符 O 将字符C 的二进制位 结构与所有 0与 FF(10 进制为 255)之 间的 16 进制数进行 比较。HEXDEC 的10 进制值 I ,在HEXDEC 分配到I 期间,通过 使用自动类 型转换确定 。如果比较 结果为真, 则在屏幕上 显式 16 进制数及其 10 进制值。下 表列出这些 数的二进制 位结构。16 进制10 进制二进制 位结构00000000

19、000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二进制位结 构由其 ASCII 码 67 为当前硬件 平台进行定 义。与用户 看到的一样 ,列表输出 中出现的数 字,填写 1 的二进制位 位置与 67 的二进制位 结构一样。7检查字段是 否属于某一 范围要检查值是 否属于特定 范围,请使 用下列带有 BETWEEN 参数的逻辑 表达式:语法. BETWEEN AND .如果 在 和 之间的范围 内发生,则 表达式为真 。它是下列 逻辑表达式 的短格式:IF GE

20、AND LE .DATA: NUMBER TYPE I, FLAG.NUMBER = .IF NUMBER BETWEEN 3 AND 7. FLAG = X.ELSE. FLAG = .ENDIF.这里,如果 NUMBER 的内容在 3 和 7 之间出现, 字段 FLAG 设置为“X” 。7检查初始值要检查字段 是否设置为 初始值,请 如下使用带 有 IS INITIAL 参数的逻辑 表达式。语法. IS INITIAL .如果 包含本身类 型的初始值 ,则表达式 为真。通常 情况下,任 何字段,基 本的或结构 化的(字符 串和内表) ,在 CLEAR 语句执行后 ,都包含其 初始值(参 见

21、 重置缺省值 (页 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.ELSE. WRITE / Flag is not initial.ENDIF.这产生如下 输出:Flag is not initialFlag is initial.这里,DATA 语句之后, 字符串 FLAG 不包含初始 值,因为用 VALUE

22、参数设置为 X。执 行 CLEAR 语句之后, 将其重置为 初始值。7检查选择条 件要检查字段 内容是否与 选择表中的 选择条件匹 配,可以如 下使用带有 IN 参数的逻辑 表达式:语法. IN .如果字段 内容的符合 选择表 中的条件, 则表达式为 真。关于选择条 件的详细信 息,参见 使用选择标准。关于逻辑表 达式中检查 选择条件的 详细信息, 包括示例, 参见 使用逻辑表达式中的选择表。7组合几个逻 辑表达式通过使用逻 辑连接运算 符 AND、OR 和 NOT,可 以将几个逻 辑表达式组 合为单个表 达式: _ 要将几个 逻辑表达式 组合为单个 表达式,且 该表达式仅 当所有组件 表达式

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

24、是将经常 为假的比较 放置在 AND 链的开头, 而将费时的 比较,如字 符串查找放 等到最后。DATA: F TYPE F VALUE 100.00, N(3) TYPE N VALUE 123, C(3) TYPE C VALUE 456.WRITE The following logical expression is 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.这产生如下 输出:下列逻辑表达式为真:

25、 ( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 语句中使用 逻辑表达式 。如果逻辑 表达式为真 ,则将其在 屏幕上显示 出来。如果 为假,则屏 幕上出现相 反的表达式 。7编程分支和 循环可以在程序 中定义条件 和无条件分 支和循环。 为此,ABAP/4 提供了几个 在下列主题 中描述的语 句。分支循环7使用 IF 的条件分支IF 语句允许依 据条件将程 序流转到特 定的语句块 中。该语句 块包括 IF 语句及其后 面的 ELSEIF、 ELSE 或 ENDIF 之间的所有 命令。语法IF . ELSEIF . ELS

26、EIF . .ELSE. ENDIF.如果第一个 条件是真, 系统将执行 所有语句直 到第一个语 句块结束, 然后继续处 理 ENDIF 语句之后的 程序。要采 用选择性条 件,可以使 用 ELSEIF 语句。如果 第一个条件 是假,系统 使用与 IF 语句一样的 方式处理后 面的 ELSEIF 语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句 块。最后的 语句块必须 用 ENDIF 结束。要用公式表 达 IF 和 ELSEIF 语句中的条 件,可以使 用任何 编程逻辑表 达式 (页 7) 描述的逻辑 表达式。ABAP/4 允许无限地 嵌套 IF - ENDIF 语句块,但 是必须在相 同的处理块 中终止。换 句话说,就 是 IF - ENDIF 块不能包含 事件关键字 。DATA: TEXT1(30) VALUE This is the first text, TEXT2(30) VALUE This is the second text, TEXT3(30) VALUE This is the third text, STRING(5) VALUE eco.IF TEXT1 CS STRING. WRITE / C

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1