欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    SAP的ABAP4语言中文培训教材第一部分第七章 控制 ABAP4 程序流9754.docx

    • 资源ID:62699038       资源大小:82.30KB        全文页数:34页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    SAP的ABAP4语言中文培训教材第一部分第七章 控制 ABAP4 程序流9754.docx

    8SAP AG第七章:ÕÂ 7: 1 1控制 ABAP/4 程序流概览内容ABAP/4中 流控制的概 念编程逻辑表 达式比较所有的 字段类型比较字符串 和数字串二进制位结 构的比较检查字段是 否属于某一 范围检查初始值检查选择条 件组合几个逻 辑表达式编程分支和 循环使用 IF 的条件分支使用 CASE 的条件分支使用 DO 的无条件循 环使用 WHILE 的条件循环终止循环要根据一定 条件执行程 序组件,或 要将重复语 句序列组合 在循环中, 可以使用 ABAP/4 提供的用于 控制程序流 的标准关键 字。ABAP/4 也包含重要 的附加特征 。ABAP/4 程序流可以 内部控制和 外部控制。 ABAP/4 程序流的内 部控制和外 部控制之间 的差别在ABAP/4中 流控制的概 念 (页 8) 中 解释。本节主要讨 论内部流控 制。为此, 可使用其他 编程语言( 例如,C、 FORTRAN、 PASCAL 等等)中熟 悉的标准控 制关键字。下列主题描 述1ABAP/4中 流控制的概 念与其他高级 编程语言一 样(如,C、 FORTRAN 和 PASCAL 等等),ABAP/4 提供也用于 控制程序流 的标准关键 字。这些关 键字用于_ 分支 (IF、CASE)_ 循环 (DO、WHILE)然而,ABAP/4 与其他编程 语言不同之 处在于其具 有程序流的 内部控制和 外部控制。_ 内部控制 由上述标准 关键字引导 。在程序代 码中对其进 行定义。_ 外部控制 由事件引导 。事件由 ABAP/4 程序(系统 程序或用户 程序)或者 交互式用户 输入(例如 ,使用鼠标 在屏幕上单 击)生成。 系统不必按 ABAP/4 程序中列出 的顺序对进 行语句处理 。这使得 ABAP/4 成为事件驱 动编程语言 ,类似于 Microsoft 的Visual Basic。时间事件和 ABAP/4 程序的连接 由事件关键 字提供。ABAP/4 程序中的每 个语句都属 于特别的事 件关键字。 即使在程序 中没有指定 任何事件关 键字,所有 语句都自动 归属于标准 事件关键字 (START-OF-SELECTION) ,与程序中 事件语句的 次序完全不 相干。所有属于某 一特定事件 关键字的语 句形成一个 处理块。处 理块是一个 在事件发生 时执行的模 块。处理块 内的程序流 依赖于内部 控制。系统 按顺序处理 语句,或按 照前面提到 的标准关键 字定义的顺 序处理。ABAP/4 程序常规结 构如下:假设当用户 选择一行后 ,生成列表 且提供一些 细分设备的 报表程序必 须作出反应 (详细信息 ,参见 交互列表)。需要为 该事件处理 的代码必须 插入事件关 键字 AT LINE-SELECTION 之后。AT LINE-SELECTION. MOVE 'X' TO FLAG. .无论何时用 户通过单击 鼠标或按 F2 键在列表中 选择一个项 目时,AT LINE-SELECTION 和下一个事 件关键字之 间的所有语 句将被处理关于外部控 制的详细信 息,如事件 及其如何与 ABAP/4 程序相互作 用的信息, 参见 C通过事件控制 ABAP/4 程序流。该节说明如 何使用外部 控制控制处 理块内的程 序流。要控制 ABAP/4 程序中的内 部流,请遵 循结构化编 程原则并将 程序模块划 分为单个逻 辑相关语句 块(这些组 成控制结构 )。其中的 每个语句块 都执行主任 务的一部分 。要使程序易 于阅读,应 该缩排控制 结构中的语 句块。出于 布局需要, 可以使用 ABAP/4 编辑器功能 “编辑 -> 插入语句.” 和“程序 -> 整齐打印程 序”(详细 信息,参见 ABAP/4 程序布局 (页 26)。可以用 IF、CASE、 DO 和 WHILE 之类的关键 字控制处理 块中不同语 句之间的程 序流。这些 语句允许编 制条件和无 条件的分支 和循环。条 件使用逻辑 表达式,可 以是真,也 可以为假。2编程逻辑表 达式使用条件控 制程序中的 内部流。要 用公式指定 条件,请使 用比较数据 字段的逻辑 表达式,如 下所示:语法 . <F1> <operator> <F2> .该表达式比 较两个字段 。可能为真 ,也可能为 假。在带关 键字 IF、 CHECK 和 WHILE 的条件语句 中使用逻辑 表达式。根据操作数 <F1> 和 <F2> 的数据类型 ,可以使用 不同的逻辑 运算符。允 许进行:除上述比较 之外,还可 以执行测试 以检查数据 字段是否完 全满足一定 条件。可以 使用这些测 试:另外,可以 将几个逻辑 表达式组合 为一个简单 逻辑表达式 。3比较所有的 字段类型要比较所有 的字段类型 ,可以在逻 辑表达式中 使用下列运 算符:<运算符>含 义EQ等于 =等于NE不 等于<>不 等于><不 等于LT小 于<小于LE小 于等于<=小 于等于GT大 于>大于GE大 于等于>=大 于等于操作数可以 是数据库字 段、内部字 段、文字或 常数。除基本字段 外,还可以 将结构数据 类型和上表 中的运算符 结合起来作 为操作数。 字段串逐个 组件进行比 较,嵌套的 结构分为基 本的字段。 关于比较内 表的详细信 息,参见 比较内表 (页 Error! Not a valid link.) 。如果有意义 ,可以对不 同数据类型 的字段进行 比较。如果 字段可转换 ,就可以进 行比较。在 比较之前, 系统将按照 下列层次规 则执行自动 类型转换( 参见 键入转换 (页 636) ):1.如果 操作数之一 是浮点数( 类型 F),则系 统将其它操 作数转换为 类型 F。2.如果 操作数之一 是压缩字段 (类型 P),则系 统将其它操 作数转换为 类型 P。3.如果 操作数之一 是日期字段 (类型 D)或时间 字段(类型 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 following logical expressions are true:'.IF F >= P . WRITE: / F,'>=',P.ELSE. WRITE: / F,'<',P.ENDIF.IF I EQ P . WRITE: / I,'EQ',P.ELSE. WRITE: / I,'NE',P.ENDIF.这生成如下 输出:The following logical expressions are true: 1.000000000000000E+02 >= 50.00 30 NE 50.00这里,在 IF 语句中使用 两个逻辑表 达式。如果 逻辑表达式 为真,则屏 幕上显示出 来。如果逻 辑表达式为 假,则将相 反表达式显 示在屏幕上 。4比较字符串 和数字串要比较字符 串(类型 C)和数字 文本(类型 N),可以 在逻辑表达 式中使用下 列运算符。<运算符>含 义CO仅包 含CN不仅 包含CA包 含任何NA不 包含任何CS包 含字符串NS不 包含字符串 CP包含模 式NP不包 含模式因为除类型 N 和 C 外,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的比较时 ,操作数应 该是类型 N 或 C。运算符的功 能如下:CO (仅包含)如果 <F1> 仅包含 <F2> 中的字符, 则逻辑表达 式<F1> CO <F2>为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包括 <F1> 的长度。如 果为假,则 SY-FDPOS 包含 <F1> 中第一个未 在 <F2> 内出现的字 符的偏移量 。CN (不仅包含 )如果 <F1> 还包含 <F2> 之外的其他 字符,则逻 辑表达式<F1> CN <F2>为真。该比 较区分大小 写,并包括 尾部空格。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <F1> 中第一个未 同时在 <F2> 中出现的字 符的偏移量 。如果为假 ,SY-FDPOS 包含 <F1> 的长度。CA (包含任何 )如果 <F1> 至少包含 <F2> 的一个字符 ,则逻辑表 达式<F1> CA <F2>为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FDPOS 包含 <F1> 中第一个也 在 <F2> 中出现的字 符的偏移量 。如果为假 ,SY-FDPOS 包含 <F1> 的长度。NA (不包含任 何)如果 <F1> 不包含 <F2> 的任何字符 ,则逻辑表 达式<F1> NA <F2>为真。该比 较区分大小 写。如果比 较结果为真 ,则系统字 段 SY-FDPOS 包含 <F1>的 长度。如果 为假,则 SY-FDPOS 包含 <F1> 中在 <F2> 内出现的第 一个字符的 偏移量。CS (包含字符 串)如果 <F1> 包含字符串 <F2>, 则逻辑表达 式 <F1> CS <F2>为真。忽略 尾部空格并 且比较不区 分大小写。 如果比较结 果为真,则 系统字段 SY-FDPOS 包含 <F2> 在 <F1> 中的偏移量 。如果为假 ,SY-FDPOS 包含 <F1> 的长度。NS (不包含字 符串)如果 <F1> 不包含字符 串 <F2>, 则逻辑表达 式<F1> NS <F2>为真。忽略 尾部空格且 比较不区分 大小写。如 果比较为真 ,系统字段 SY-FDPOS 包含 <F1> 的长度。如 果为假,系 统字段 SY-FDPOS 包含 <F2> 在 <F1> 中的偏移量 。CP (包含模式 )如果 <F1> 包含模式 <F2>, 则逻辑表达 式 <F1> CP <F2>为真。如果 <F2> 属于类型 C,则可以 在 <F2> 中使用下列 通配符:_ * 用于任何字 符串_ + 用于任何单 个字符忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 系统字段 SY-FDPOS 包含 <F2> 在 <F1> 中的偏移量 。如果为假 ,SY-FDPOS 包含 <F1> 的长度。如果要对 <F2> 中的特殊字 符进行比较 ,请将换码 字符 # 放到其前面 。可以使用 换码字符 # 指定_ 大小写字 符_ 通配符 "*"(输 入 #*)_ 通配符 "+" (输入 #+)_ 换码符号 本身 (输入 #)_ 字符串结 尾的空格 (输入 #_)NP (不包含模 式)如果 <F1> 不包含模式 <F2>, 则逻辑表达 式 <F1> NP <F2>为真。在<F2>中 ,可以使用 与 CP 相同的通配 符和换码字 符。忽略尾部空 格且比较不 区分大小写 。如果比较 结果为真, 则系统字段 SY-FDPOS 包含 <F1>. 的长度,如 果为假,SY-FDPOS 包含 <F2> 在 <F1> 中的偏移量 。DATA: F1(5) TYPE C VALUE <F1>, F2(5) TYPE C VALUE <F2>.IF F1 <operator> F2. WRITE: / 'Comparison true, SY-FDPOS=', SY-FDPOS.ELSE. WRITE: / 'Comparison false, SY-FDPOS=', SY-FDPOS.ENDIF.下表列出该 程序的执行 结果,取决 于所用的运 算符和 F1 / F2 字段。<F1><operator><F2>ResultSY-FDPOS'BD 'CO'ABCD '真5'BD 'CO'ABCDE'假 2'ABC12'CN'ABCD '真3'ABABC'CN'ABCD '假5'ABcde'CA'Bd '真1'ABcde'CA'bD '假5'ABAB 'NA'AB '假0'ababa'NA'AB '真5'ABcde'CS'bC '真1'ABcde'CS'ce '假5'ABcde'NS'bC '假1'ABcde'NS'ce '真5'ABcde'CP'*b*'真 1'ABcde'CP'*#b*'假 5'ABcde'NP'*b*'假 1'ABcde'NP'*#b*'真 56二进制位结 构的比较要将逻辑表 达式初始操 作数第一字 节的二进制 位结构与第 二操作数的 进行比较, 请使用下列 操作符。<运算符>含 义O二进制 位是 1Z二进制 位是 0M混合二 进制位第二 操作数的长 度应为一个 字节。没有必要对 第二操作数 使用长度为 1 的十六进制 字段(类型 X),但却 较方便,因 为其长度为 一个字节且 数字值直接 与二进制位 结构相关。操作符功能 如下:O (二进制位 是 1)如果 <hex> 中二进制位 是 1 的位置,在 <f> 中是 1,则逻辑 表达式<f> O <hex>为真。Z (二进制位 是0)如果 <hex> 中二进制位 是 1 的位置,在 <f> 中是 0,则逻辑 表达式<f> Z <hex>为真。M (混合二进 制位)如果从 <hex> 中二进制位 是 1 的位置起, <f> 中至少一个 是 1,一个是 0,则逻辑 表达式<f> M <hex>为真。DATA: C VALUE 'C', HEXDEC TYPE X, I TYPE I.HEXDEC = 0.DO 256 TIMES. I = HEXDEC. IF C 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 进制二进制 位结构00000000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字 符C的 二进制位结 构由其 ASCII 码 67 为当前硬件 平台进行定 义。与用户 看到的一样 ,列表输出 中出现的数 字,填写 1 的二进制位 位置与 67 的二进制位 结构一样。8检查字段是 否属于某一 范围要检查值是 否属于特定 范围,请使 用下列带有 BETWEEN 参数的逻辑 表达式:语法. <F1> BETWEEN <F2> AND <F3> .如果 <F1> 在 <F2> 和 <F3> 之间的范围 内发生,则 表达式为真 。它是下列 逻辑表达式 的短格式:IF <F1> GE <F2> AND <F1> LE <F3>.DATA: NUMBER TYPE I, FLAG.NUMBER = .IF NUMBER BETWEEN 3 AND 7. FLAG = 'X'.ELSE. FLAG = ' '.ENDIF.这里,如果 NUMBER 的内容在 3 和 7 之间出现, 字段 FLAG 设置为“X” 。9检查初始值要检查字段 是否设置为 初始值,请 如下使用带 有 IS INITIAL 参数的逻辑 表达式。语法. <f> IS INITIAL .如果 <f> 包含本身类 型的初始值 ,则表达式 为真。通常 情况下,任 何字段,基 本的或结构 化的(字符 串和内表) ,在 CLEAR <f> 语句执行后 ,都包含其 初始值(参 见 重置缺省值 (页 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 参数设置为 X。执 行 CLEAR 语句之后, 将其重置为 初始值。10检查选择条 件要检查字段 内容是否与 选择表中的 选择条件匹 配,可以如 下使用带有 IN 参数的逻辑 表达式:语法. <f> IN <seltab> .如果字段 <f> 内容的符合 选择表 <seltab> 中的条件, 则表达式为 真。关于选择条 件的详细信 息,参见 使用选择标准。关于逻辑表 达式中检查 选择条件的 详细信息, 包括示例, 参见 使用逻辑表达式中的选择表。10组合几个逻 辑表达式通过使用逻 辑连接运算 符 AND、OR 和 NOT,可 以将几个逻 辑表达式组 合为单个表 达式: _ 要将几个 逻辑表达式 组合为单个 表达式,且 该表达式仅 当所有组件 表达式为真 时才为真, 则表达式之 间要用 AND 连接。_ 要将几个 逻辑表达式 组合为单个 表达式,且 只要其中一 个组件表达 式为真时, 该表达式即 为真,则表 达式之间要 用 OR 连接。_ 要转化逻 辑表达式的 结果,请在 其前面指定 NOT。NOT 优先于 AND,AND 优先于 OR。但是 ,可以用任 何括弧组合 指定处理顺 序。由于 ABAP/4 将括弧解释 为单字,前 面或后面必 须至少有一 个空格。ABAP/4 从左到右处 理逻辑表达 式。如果确 定组件表达 式之一是真 或假,就不 再执行该组 件中其余的 比较或检查 。这意味着 采取这种方 法组织逻辑 表达式可以 提高性能, 就是将经常 为假的比较 放置在 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.这产生如下 输出:下列逻辑表达式为真: ( 456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中, 在 IF 语句中使用 逻辑表达式 。如果逻辑 表达式为真 ,则将其在 屏幕上显示 出来。如果 为假,则屏 幕上出现相 反的表达式 。10编程分支和 循环可以在程序 中定义条件 和无条件分 支和循环。 为此,ABAP/4 提供了几个 在下列主题 中描述的语 句。分支循环11使用 IF 的条件分支IF 语句允许依 据条件将程 序流转到特 定的语句块 中。该语句 块包括 IF 语句及其后 面的 ELSEIF、 ELSE 或 ENDIF 之间的所有 命令。语法IF <condition1>. <statement block>ELSEIF <condition2>. <statement block>ELSEIF <condition3>. <statement block>.ELSE. <statement block>ENDIF.如果第一个 条件是真, 系统将执行 所有语句直 到第一个语 句块结束, 然后继续处 理 ENDIF 语句之后的 程序。要采 用选择性条 件,可以使 用 ELSEIF 语句。如果 第一个条件 是假,系统 使用与 IF 语句一样的 方式处理后 面的 ELSEIF 语句。如果 IF 或 ELSEIF 条件都为假 ,则执行 ELSE 开始的语句 块。最后的 语句块必须 用 ENDIF 结束。要用公式表 达 IF 和 ELSEIF 语句中的条 件,可以使 用任何 编程逻辑表 达式 (页 8) 描述的逻辑 表达式。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 / 'Condition 1 is fulfilled'.ELSEIF TEXT2 CS STRING. WRITE / 'Condition 2 is fulfilled'.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 中。12使用 CASE 的条件分支要根据特殊 数据字段的 内容执行不 同的语句块 ,可以如下 使用 CASE 语句:语法CASE <f>. WHEN <F1>. <statement block> WHEN <F2>. <statement block> WHEN <F3>. <statement block> WHEN . . WHEN OTHERS. <statement block>ENDCASE.系统执行 WHEN 语句之后的 语句块,如 果 <f> 内容等于 <fi> 的内容,且 继续处理 ENDCASE 语句后面的 语句。如果 <f> 的内容不等 于 <fi> 的内容,则 执行选项 WHEN OTHERS 后面的语句 块。最后的 语句块必须 用 ENDCASE 结束。使用 CASE 的条件分支 是带 IF 的类似处理 的短格式:IF <f> = <F1>. <statement block>ELSEIF <f> = <F2>. <statement block>ELSEIF <f> = <F3>. <statement block>ELSEIF <f> = . .ELSE. <statement block>ENDIF.在 ABAP/4 中,可以嵌 套 CASE - ENDCASE 块,且可以 与 IF - ENDIF 结合使用, 但必须在同 一处理块中 终止。DATA: TEXT1 VALUE 'X', TEXT2 VALUE 'Y', TEXT3 VALUE 'Z', STRING 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”,。13使用 DO 的无条件循 环如果想要多 次执行语句 块,则可以 如下使用 DO 语句编程循 环:语法DO <n> TIMES VARYING <f> FROM <F1> NEXT <F2>. <statement block>ENDDO.在发现 EXIT、 STOP 或 REJECT 语句之前, 系统继续执 行由 DO 引导、ENDDO 结束的语句 块(参见 终止循环 (页 8) )。可以使用 TIMES 选项限制循 环次数。<n> 可以是文字 或变量。如 果 <n> 是 0 或负数,系 统不执行该 循环。系统字段 SY-INDEX 中包含已处 理过的循环 次数。使用 DO 语句时要避 免死循环。 如果不使用 TIMES 选项,则在 语句块中至 少应包含一 个 EXIT、 STOP 或 REJECT 语句,以便 系统能够退 出循环。本例显示 DO 循环的基本 格式。DO.WRITE SY-INDEX. IF SY-INDEX = 3. EXIT. ENDIF.ENDDO.产生如下输 出: 1 2 3这里,处理 3 次循环,然 后在 EXIT 语句后退出 循环。可以任意嵌 套 DO 循环,也可 以与其他循 环组合使用 。本例显示 2 个嵌套循环 ,都使用 TIMES 选项。DO 2 TIMES. WRITE SY-INDEX. SKIP. DO 3 TIMES. WRITE SY-INDEX. ENDDO. SKIP.ENDDO.产生如下输 出: 1 1 2 3 2 1 2 3外部循环执 行 2 次。每次执 行外部循环 时,内部循 环都执行 3 次。注意系 统字段 SY-INDEX 记录每个循 环各自的循 环次数。可以使用 VARYING 选项在每次 循环中给变 量 <f> 重新赋值。 <F1>、 <F2>、 <F3>、 . 必需是内存 中类型相同 和长度相等 的一系列等 距字段。第 一次循环中 ,将 <F1> 分配给 <f>,第 二次循环中 ,将 <F2> 分配给 <f>,以 此类推。可 以在一个 DO 语句中使用 多个 VARYING 选项。如果在 DO 循环中改变 控制变量 <f>,则 系统将自动 改变相应的 字段 <fi>。应保证循环 次数不超过 涉及到的变 量 <F1>、 <F2>、 <F3> 的数量。该示例说明 如何在 DO 循环中使用 VARYING 选项。DATA: BEGIN OF TEXT, WORD1(4) VALUE 'This', WORD2(4) VALUE 'is', WORD3(4) VALUE '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: STRING1, STRING2.ENDDO.这产生如下 输出:This is a loopThis was a loop字段串 TEXT 代表内存中 四个等距字 段序列。每 次执行第一 个 DO 循环时,都 依次将其组 件分配到 STRING1 中。如果 STRING1 包含“is” ,则将其改 变为“was” ,而且自动 将 TEXT-WORD2 改变为“was” 。每次执行 第二个 DO 循环时,将 TEXT 的组件传递 给STRING1和 STRING2。15使用 WHILE 的条件循环如果只要条 件为真,就 不止一次执 行语句,可 以如下使用 WHILE 语句编程:语法WHILE <condition> VARY <f> FROM <F1> NEXT <F2>. <statement block>ENDWHILE.只要 <condition> 是真,或系 统发现 EXIT、 STOP 或 REJECT 语句,系统 将继续执行 由 WHILE 语句引导、 ENDWHILE 结束的语句 块(参见 终止循环 (页 8) )。对于 <condition>, 可以使用 编程逻辑表 达式 (页 8) 中描述的任 何逻辑表达 式。系统字段 SY-INDEX 中包含已执 行的循环次 数。可以任意嵌 套 WHILE 循环,也可 与其他循环 结合使用。WHILE 语句的 VARY 选项与 DO 循环的 VARYING 选项工作方 式一样(参 见使用 DO 的无条件循 环 (页 8) )。允许 每次执行循 环时为变量 <f> 重新赋值。 <F1>、 <F2>、 <F3>、 . 必需是内存 中类型相同 和长度相等 的一系列等 距字段。第 一次循环时 ,将 <F1> 分配给 <f>,第 二次循环时 ,将 <F2> 分配给 <f>,以 此类推。可 以在一个 WHILE 语句中使用 多个 VARY 选项。使用 WHILE 语句要避免 死循环。请 记住,在一 段时间之后 ,WHILE 语句条件应 变为假,或 者系统能够 找到 EXIT、 STOP 或 REJECT 语句退出循 环。DATA: LENGTH TYPE I VALUE 0, STRL TYPE 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 t S t r i n gSTRLEN: 11Length of string: 11此处使用 WHILE 循环确定字 符串的长度 。做法是: 每次执行循 环时,都将 字符串左移 一位,直到 仅包含空格 。选择本例 主要是为了 说明 WHILE 语句。但是 ,确定字符 串长度更简 便和有效的 办法是通过 使用内置的 函数 STRLEN, 这在示例中 也可看出。16终止循环要终止循环 过程,请使 用下列关键 字之一。关键 字用途无条 件终 止 循 环过 程 (页 8) CONTI

    注意事项

    本文(SAP的ABAP4语言中文培训教材第一部分第七章 控制 ABAP4 程序流9754.docx)为本站会员(zhang****gqing)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开