SAP的ABAP4语言中文培训教材第一部分第七章控制ABAP4程序流_第1页
SAP的ABAP4语言中文培训教材第一部分第七章控制ABAP4程序流_第2页
SAP的ABAP4语言中文培训教材第一部分第七章控制ABAP4程序流_第3页
SAP的ABAP4语言中文培训教材第一部分第七章控制ABAP4程序流_第4页
SAP的ABAP4语言中文培训教材第一部分第七章控制ABAP4程序流_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、了 SAP AG第七章:错误!使用2开始选项卡将 Heading 1应用于要在此处显示的文字。? 7:控制ABAP/4程序流概览内容ABAP/4中流控制的概念25 -19编程逻辑表 达式25 -20比较所有的字段类型25-21比较字符串和数字串25-22二进制位结构的比较25-24检查字段是否属于某一范围25-26检查初始值.25-26检查选择条件25-27组合几个逻辑表达式25-27编程分支和循环25 -28使用IF的条件分支25-28使用CASE的条件分支25-29使用DO的无条件循环25-30使用WHILE的条件循环25-32终止循环.25-33可以使用ABAP/4提供的要根据一定条件执

2、行程序组件,或要将重复语句序列组合在循环中, 用于控制程序流的标准关键字。ABAP/4也包含重要的附加特征。ABAP/4程序流可以内部控制和外部控制。ABAP/4程序流的内部控制和外部控制之间的差别 在ABAP/4中流控制的概念(页8-19 )中解释。本节主要讨论内部流控制。为此,可使用其他编程语言(例如,C、 FORTRAN、 PASCAL等 等)中熟悉的标准控制关键字。下列主题描述ABAP/4中流控制的概念与其他高级编程语言一样(如,C、 FORTRAN和PASCAL等等),ABAP/4提供也用于控制程 序流的标准关键字。这些关键字用于_ 分支(IF、CASE)_ 循环(DO、WHILE)

3、与其他编程语言不同之处在于其具有程序流的内部控制和外部控制。然而,ABAP/4内部控制外部控制(例如句处理,I由上述标准I由事件引导,使用鼠标在屏幕上单击)生成。系统不必按ABAP/4程序中列出的顺序对进行语 。这使得ABAP/4成为事件驱动编程语言,类似于Microsoft关键字引导。在程序代码中对其进行定义。事件由ABAP/4程序(系统程序或用户程序)或者交互式用户输入的 Visual Basic 。ABAP/4程序的连接由事件关键字提供。ABAP/4程序中的每 即使在程序时间事件和 件关键字。(START-OF-SELECTION ),与程序中 事件语句的 次序完全不 相干。所有属于某一

4、特定事件中没有指定 任何事件关 键字,所有 语句都自动关键字的语句形成一个处理块。处理块是一个个语句都属 归属于标准于特别的事事件关键字在事件发生时执行的模24 #间的所有语句将被处理关于外部控 制的详细信 控制ABAP/4程序流。该节说明如何使用外部控制控制处理块内的程序流。要控制ABAP/4程序中的内 句块(这些组成控制结构部流,请遵循结构化编程原则并将程序模块划分为单个逻辑相关语 )。其中的每个语句块都执行主任务的一部分。要使程序易 辑器功能 序布局(页2-6)。于阅读,应“编辑-该缩排控制 结构中的语 句块。出于 布局需要,可以使用ABAP/4编插入语句”和“程序- 整齐打印程 序”(

5、详细信息,参见 ABAP/4程块。处理块内的程序流依赖于内部控制。系统按顺序处理语句,或按照前面提到的标准关键字 定义的顺序处理。ABAP/4程序常规结构如下:假设当用户选择一行后,生成列表且提供一些细分设备的报表程序必须作出反应(详细信 息,参见 交互列表)。需要为 该事件处理 的代码必须 插入事件关 键字AT LINE-SELECTION 之后。AT LINE-SELECTION.MOVE X TO FLAG.无论何时用户通过单击鼠标或按F2键在列表中选择一个项目时,AT LINE-SELECTION 和 下一个事件关键字之息,如事件 及其如何与 ABAP/4程序相互作 用的信息, 参见C

6、通过事件了 SAP AG第七章:错误!使用2开始”选项卡将Heading 1应用于要在此处显示的文字。可以用IF、CASE、DO和WHILE之类的关键字控制处理块中不同语 句允许编制条件和无条件的分支和循环。条件使用逻辑表达式,可句之间的程 以是真,也序流。这些语 可以为假。编程逻辑表达式使用条件控制程序中的 所示:内部流。要 用公式指定 条件,请使 用比较数据字段的逻辑表达式,如下语法 vop erator .该表达式比较两个字段 语句中使用逻辑。可能为真,也可能为 假。在带关 键字IF、 表达式。CHECK 和WHILE的条件根据操作数和vF2的数据类型,可以使用 不同的逻辑 运算符。允

7、许进行:除上述比较试:之外,还可以执行测试以检查数据字段是否完全满足一定条件。可以使用这些测另外,可以将几个逻辑表达式组合为一个简单逻辑表达式。比较所有的字段类型 要比较所有的字段类型,可以在逻辑表达式中使用下列运算符:运算符含义EQ等于=等于NE不等于不等于不等于LT小于小于LE小于等于大于GE大于等于=大于等于操作数可以 是数据库字 段、内部字 段、文字或 常数。除基本字段夕卜,还可以将结构数据类型和上表中的运算符结合起来作为操作数。字段串逐个组 件进行比较,嵌套的结构分为基本的字段。关于比较内表的详细信息,参见比较内表(页Error! Not a valid link.)。较之前,系统将

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

9、换为类型C。 如果操作数之一是字符字段(类型这两种操作数都转换为类型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 exp ressions are true:.IF F = P .WRITE: / F,=, P.ELSE.WRITE: / F,=50.0030 NE50.00这里,在IF语句中使用 两个逻辑表 达式。如果 逻辑表达式为假,则将相反表达式显示在屏幕上逻辑表达式。为真,则屏幕上显示出来。如果比较字符串 和数

10、字串要比较字符 串(类型 C)和数字 文本(类型N),可以 在逻辑表达 式中使用下 列运算符。运算符24 -#了 SAP AG第七章:错误!使用2开始”选项卡将Heading 1应用于要在此处显示的文字。CO仅包含CN不仅包含CA包含任何NA不包含任何CS包含字符串NS不包含字符串CP包含模式NP不包含模式因为除类型 N和C夕卜,系统不 能执行任何 其它类型转 换,所以, 在进行包含 这些运算之 一的 比较时,操作数应该是类型N或运算符的功能如下:CO (仅包含)如果F1仅包含vF2中的字符,则逻辑表达式 CO 为真。该比括F1的长度。女n果为假,则 SY-FDPOS包含vF1中第一个未 在

11、移量。较区分大小写,并包括尾部空格。如果比较结果为真,则系统字段SY-FDPOS包F2内出现的字 符的偏24 7如果F1F1 CN 为真。该比含vF1中第一个未 同时在vF2中出现的字 符的偏移量 长度。F2较区分大小写,并包括尾部空格。如果比较结果为真,则如果为假 ,SY-FDPOS包含 vF1的系统字段SY-FDPOS包CN (不仅包含)还包含F2之外的其他字符,则逻辑表达式如果F1 CA 较区分大小 写。如果比较结果为真,则系统字。如果为假 ,SY-FDPOS为真。该比在vF2中出现的字 符的偏移量段SY-FDPOS包含 vF1中第一个也 包含vF1的长度。NA (不包含任何)不包含F2

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

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

14、含vF2。可以使用换码字符#本身(输入#) 尾的空格(输入#_)NP (不包含模如果vF1不包含模式vF2,则逻辑表达式 NP 符。为真。在vF2中,可以使用 与CP相同的通配 符和换码字忽略尾部空格且比较不区分大小写长度,如果为假,SY-FDPOS包含。如果比较结果为真,vF2在 vF1 中的偏移量则系统字段OSY-FD POS包含vF1.DATA: F1 (5) TYPE C VALUE ,F2(5) TYPE C VALUE .IF F1 vop eratorF2.WRITE: / Com parison true, SY-FD POS=, SY-FD POS.ELSE.WRITE: /

15、 Comp arison false, SY-FD POS=, SY-FD POS. ENDIF.下表列出该程序的执行结果,取决于所用的运算符和F1 / F2字段。voperatorvF2ResultSY-FD POS了 SAP AG第七章:错误!使用2开始”选项卡将Heading 1应用于要在此处显示的文字。BD COABCD 真5BD COABCDE假2ABC12CNABCD 真3ABABCCNABCD 假5ABcdeCABd 真1ABcdeCAbD 假5ABAB NAAB 假0ababaNAAB 真5ABcdeCSbC 真1ABcdeCSce 假5ABcdeNSbC 假1ABcdeNSc

16、e 真5ABcdeCP*b*真1ABcdeCP*#b*假5ABcdeNP*b*假1ABcdeNP*#b*真5二进制位结构的比较要将逻辑表达式初始操作数第一字节的二进制位结构与第二操作数的进行比较,请使用下列 操作符。运算符含义O二进制位是1Z二进制位是0M混合二进制位第二操作数的长度应为一个字节。没有必要对 第二操作数 使用长度为1的十六进制 字段(类型X),但却 较方便,因 为其长度为 一 个字节且数字值直接与二进制位结构相关。24 9操作符功能如下:0(二进制位女口果hex是1)中二进制位 是1的位置,在 f中是1,则逻辑表达式 O 为真。Z (二进制位 女口果 vhex0,则逻辑表达式产

17、生下列输出:0001020340644165426643文里之间的1667运算符O将字符 C 的二进制位 结构与所有 O与 进制数进行比较。HEXDEC的10进制值I,在HEXDECFF (10 进制为 255)分配到I期间,通过使 用自动类 型转换确定。如果比较 结果为真,则在屏幕上 显式16进制数及其10进制值。下表列出这些 数的二进制 位结构。使用是0)中二进制位 是1的位置,在 vf中是0,则逻辑表达式vf Z vhex为真。制位)M (混合二进如果从vhex中二进制位 是1的位置起,vf中至少一个 是1,一个是vf M vhex为真。DATA: C VALUE C, HEXDEC T

18、YPE X, I TYPE I.HEXDEC = 0.DO 256 TIMES.I = HEXDEC.IF C O HEXDEC. WRITE: / HEXDEC, I.ENDIF.HEXDEC = HEXDEC + 1.ENDDO.16进制10进制二进制位结构00000000000011000000010220000001003300000011406401000000416501000001426601000010436701000011字符C的二进制位结 构由其ASCII码67为当前硬件 平台进行定 义。与用户 看到的一 样,列表输出中出现的数字,填写1的二进制位位置与67的二进制位结构

19、一样。检查字段是否属于某一范围要检查值是否属于特定范围,请使用下列带有BETWEEN参数的逻辑表达式:语法F1 BETWEEN AND 如果式:IF GE AND LE .DATA: NUMBER TYPE I, FLAG.NUMBER =.IF NUMBER BETWEEN 3 AND 7.FLAG = X.ELSE.FLAG =.ENDIF.这里,如果 NUMBER 的内容在3和7之间出现, 字段FLAG设置为“ X ”检查初始值要检查字段是否设置为初始值,请如下使用带有IS INITIAL参数的逻辑表达式。了 SAP AG第七章:错误!使用24开始O选项卡将Heading 1应用于要在此

20、处显示的文字。语法 . IS INITIAL .如果包含本身类 型的初始值,则表达式 为真。通常 情况下,任 何字段,基 本的或结构 化 的(字符 串和内表),在CLEAR 语句执行后,都包含其 初始值(参 见重置缺省值(页6-10) )oDATA 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 no

21、t initial. ENDIF.这产生如下输出:Flag is not initialFlag is initial.这里,DATA语句之后,字符串FLAG不包含初始 值,因为用 VALUE 参数设置为 X o执行CLEAR语句之后,将其重置为初始值。检查选择条件 要检查字段 内容是否与 选择表中的 选择条件匹 配,可以如 下使用带有IN参数的逻辑 表达式: 语法 . IN .如果字段vf内容的符合选择表vseltab中的条件,则表达式为真。关于选择条件的详细信息,参见使用选择标准。关于逻辑表 达式中检查 选择条件的 详细信息, 包括示例, 参见 使用逻辑表达式中的选择表组合几个逻辑表达式2

22、4 TO通过使用逻辑连接运算符AND、OR和NOT,可以将几个逻辑表达式组合为单个表达式:要将几个逻辑表达式组合为单个 则表达式之间要用AND连接。要将几个逻辑表达式组合为单个 为真,则表 达式之间要 用OR连接。要转化逻辑表达式的结果,请在其前面指定表达式,且表达式,且该表达式仅当所有组件表达式为真时才为真,只要其中一个组件表达式为真时,该表达式即NOT O了 SAP AG第七章:错误!使用24开始1选项卡将Heading 1应用于要在此处显示的文字。指定处理顺序。由于ABAP/4NOT优先于AND , AND优先于OR。但是,可以用任何括弧组合 将括弧解释为单字,前面或后面必须至少有一个空

23、格。24 -#ABAP/4从左到右处理逻辑表达式。如果确定组件表达 其余的比较或检查。这意味着采取这种方法组织逻辑 的比较放置在 AND链的开头,而将费时的比较,如字式之一是真表达式可以符串查找放或假,就不 提高性能,等至U最后。再执行该组件中 就是将经常为假DATA: F TYPE F VALUE 100.00, N(3) TYPE N VALUE 123, C(3) TYPE C VALUE 456.WRITE The following logical exp ression is true:.IF ( C LT N ) AND ( N GT F ).WRITE: / (,C,lt,N,

24、) AND (,N,gt,F,). ELSE.WRITE: / (,C,ge,N,) OR (,N,le,F,). ENDIF.这产生如下输出: 下列逻辑表达式为真:(456 ge 123 ) OR ( 123 le 1.000000000000000E+02 )在本例中,在IF语句中使用逻辑表达式。如果逻辑表达式为真,则将其在屏幕上显示出 来。如果为假,则屏幕上出现相反的表达式。编程分支和循环可以在程序中定义条件和无条件分支和循环。为此,ABAP/4提供了几个在下列主题中描述的 语句。分支循环使用IF的条件分支IF语句允许依据条件将程序流转到特定的语句块中。该语句块包括IF语句及其后面的EL

25、SEIF、 ELSE 或ENDIF 之间的所有 命令。语法IF vcondition i. ELSEIF . ELSEIF .ELSE.statement block ENDIF.了 SAP AG第七章:错误!使用24开始”选项卡将Heading 1应用于要在此处显示的文字。24 T15如果第一个条件是真,系统将执行所有语句直到第一个语句块结束,然后继续处理ENDIF语 句之后的 程序。要采 用选择性条 件,可以使 用ELSEIF语句。如果 第一个条件 是假,系统 使 用与IF语句一样的 方式处理后 面的ELSEIF语句。ELSE开始的语句块。最后的要用公式表 达IF和ELSEIF 的逻辑表达

26、式。语句块必须语句中的条用 ENDIF件,可以使如果IF或ELSEIF条件都为假,则执行 结束。用任何编程逻辑表达式(页24 -3 )描述ABAP/4允许无限地嵌套就 是IF - ENDIF块不能包含 事件关键字IF - ENDIF语句块,但O是必须在相 同的处理块 中终止。换 句话说,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

27、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中。使用CASE的条

28、件分支要根据特殊数据字段的内容执行不同的语句块,可以如下使用CASE语句: 语法CASE .WHEN . statement blockWHEN . WHEN . WHEN .WHEN OTHERS. ENDCASE.系统执行WHEN语句之后的语句块,如果f内容等于fi的内容,且继续处理ENDCASE 语句后面的 语句。如果 f的内容不等 于fi的内容,贝U执行选项 WHEN OTHERS后面的语 句块。最后的 语句块必须 用ENDCASE结束。使用CASE的条件分支是带IF的类似处理的短格式:IF = . ELSEIF = . ELSEIF = . ELSEIF =.ELSE.ENDIF.在

29、ABAP/4中,可以嵌 套CASE - ENDCASE 块,且可以 与IF - ENDIF结合使用, 但必须在 同一处理块中终止。DATA: TEXT1 VALUE X, TEXT2 VALUEY, 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, TEXT

30、2, TEXT3. ENDCASE.产生如下输出:String is not X Y Z这里,执行 WHEN OTHERS后面的语句 块,因为STRING的内容“ A ”不等于“ X ” 、“ Y 或 “Z ”,。使用DO的无条件循环 如果想要多次执行语句块,则可以如下使用DO语句编程循环: 语法F1 NEXT .DO vn TIMES VARYING FROM vstatement blockENDDO.在发现EXIT、STOP或REJECT语句之前, 系统继续执 行由 (参见 终止循环(页8-32 )。可以使用TIMES选项限制循环次数。n可以是文字或变量。 执行该循环。DO弓I导、END

31、DO 结束的语句块如 果n是0或负数,系 统不使用DO语句时要避免死循环。EXIT、 STOP 或 REJECT 语句,如果不使用 TIMES选项, 以便系统能够退出循环。则在 语句块中至 少应包含一 个本例显示DO循环的基本格式。系统字段SY-INDEX中包含已处理过的循环次数。DO.WRITE SY-INDEX.IF SY-INDEX = 3. EXIT.ENDIF.ENDDO.产生如下输出:1这里,处理3次循环,可以任意嵌套DO循环,2然也可以与其他循环组合使用后在EXIT语句后退出循环。本例显示2个嵌套循环,都使用TIMES选项。DO 2 TIMES.WRITE SY-INDEX. S

32、KIP.DO 3 TIMES.WRITE SY-INDEX.ENDDO.SKIP.ENDDO.产生如下输出:时,内部循环都执行3次。注意系统字段SY-INDEX量 f 重新赋值。 F1 、 F2、F3、.必需距字段。第一次循环中,将F1分配给f,第 二外部循环执 行2次。每次执行外部循环 记录每个循环各自的循环次数。可以使用VARYING选项在每次循环中给变 是内存中类型相同和长度相等的一系列等 次循环中,将F2分配给f,以此类推。可以在一个DO语句中使用 多个VARYING选项。如果在DO循环中改变控制变量f ,则 系统将自动 改变相应的 字段fio应保证循环次数不超过涉及到的变量 F1、F

33、2、F3 的数量。该示例说明如何在DO循环中使用VARYING 选项。This is aloopDATA: BEGIN OF TEXT,W0RD1(4) VALUE This,WORD2(4) VALUE is,WORD3(4) VALUE a,WORD4(4) VALUE loo p,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.

34、SKIP.DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3 VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.WRITE: STRING1, STRING2. ENDDO.输出:这产生如下loop代表内存中 四个等距字 段序列。每 次执行第一个DO循环时,都 依次将其组 ,则将其改 变为“ was” ,而且自动 将This was a字段串TEXT件分配到STRING1中。如果STRING1包含“ is”TEXT-WORD2改变为“was”。每次执行第二个DO循环时,将TEXT的组

35、件传递给STRING1 和 STRING2 o使用WHILE的条件循环如果只要条件为真,就不止一次执行语句,可以如下使用 WHILE语句编程:了 SAP AG第七章:错误!使用24开始”选项卡将Heading 1应用于要在此处显示的文字。语法WHILE VARY FROM statement blockENDWHILE.只要是真,或系统发现 语句引导、ENDWHILE 结束的语句F1 NEXT .EXIT、STOP或REJECT语句,系统将继续执行 由 WHILE 块(参见 终止循环(页8-32 ) )o 对于vcondition ,可以使用 编程逻辑表达式(页24-3 )中描述的任 何逻辑表

36、达 式。系统字段SY-INDEX中包含已执行的循环次数。可以任意嵌 套 WHILE循环,也可 与其他循环 结合使用。WHILE语句的VARY选项与DO循环的VARYING选项工作方式一样(参见使用DO的无条 件循 环(页24-13 )。允许 每次执行循 环时为变量f重新赋值。F1、vF2、vF3、. 必需是内存中类型相同和长度相等的一系列等距字段。第一次循环时,将F1分配给f, 第二次循环时,将F2分配给f,以此类推。可以在一个 WHILE语句中使用 多个VARY选 项。使用WHILE语句要避免死循环。请记住,在一段时间之后,WHILE语句条件应变为假, 或者系统能够 找到EXIT、 STOP

37、或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 SP ACE.WRITE STRING(1).LENGTH = SY-INDEX.WRITE: / STRLEN:,STRL.SHIFT STRING. ENDWHILE.24 T19WRITE: / Length of string:, LENGTH.产生如下输出:11STRLEN:Length of string:

38、11此处使用 WHILE循环确定字 符串的长度。做法是: 每次执行循 环时,都将 字符串左移 一 位,直到仅包含空格。选择本例 主要是为了 说明 WHILE语句。但是,确定字符 串长度更 简便和有效的办法是通过使用内置的函数STRLEN,这在示例中也可看出。终止循环 要终止循环 过程,请使 用下列关键 字之一。关 字键用途程(页8 - 32 )CONTINUE程(页8 - 33 )CHECK完全 终止 循环(页8-33)EXIT和终止处理块。在循环中只能使用CONTINUE ,但在循环外还可使用关键字CHECK和EXIT ,分别完成 不同的功能。 例如,可以 终止子程序 或整个程序 块。关于C

39、HECK和EXIT语句及其如 何 在循环外 使用的详细 信息,参见终止子系统以下主题说明如何在DO和WHILE循环以及下歹y循环中使 用CONTINUE、 CHECK 和EXIT :_LOOP- ENDLO OP 循环,用于 处理内表)。(参见 循环处理(页 Error! Not a valid link.SELECT - ENDSELECT循环,用于从数据表中读取数据 (参见从几行选择所有数据)。无条件终止循环过程要立即无条件终止循环,请如下使用CONTINUE语句: 语法CONTINUE.在CONTINUE语句之后,系统跳过当前语句块中所有剩余语句块,继续该语句后面的循环。DO 4 TIM

40、ES.IF SY-INDEX = 2. CONTINUE.ENDIF.WRITE SY-INDEX.ENDDO.产生如下输出:134此处系统不处理WRITE语句就终止第二次循环有条件终止循环过程要有条件终止循环过程,请如下使用CHECK语句:语法CHECK vcondition.如果条件是假,系统跳过当前语句 vcondition,可使用编程逻辑表达式块中所有剩(页 24-3 )余语句块,中描述的任继续后面的 循环过程。对于何逻辑表达式。DO 4 TIMES.CHECK SY-INDEX BETWEEN 2 and 3.WRITE SY-INDEX.ENDDO.产生如下输出:此处系统不处理WR

41、ITE语句就终止第一个和第 间。四个循环,因为 SY-INDEX 不在 2和3之完全终止循环要无条件完全终止循环,请如下使用EXIT语句:语法EXIT.EXIT语句之后,系统立即退 出循环,继 续结束语句 的处理。在嵌套循环中,系统仅退出当前循环。(ENDDO、ENDWHILE、ENDSELECT)后面了 SAP AG第七章:错误!使用25开始9选项卡将Heading 1应用于要在此处显示的文字。? 25:DO 4 TIMES.IF SY-INDEX = 3. EXIT.ENDIF.WRITE SY-INDEX.ENDDO.产生如下输出:1 2此处系统不处理WRITE语句或第四个循环过程,就在

42、第三个循环过程中完全终止循环。概览内容ABAP/4中流控制的概念25 -19编程逻辑表 达式25 -20比较所有的字段类型25-21比较字符串和数字串25-22二进制位结构的比较25-24检查字段是否属于某一范围25-26检查初始值.25-26检查选择条件25-27组合几个逻辑表达式25-27编程分支和循环25 -28使用IF的条件分支25-28使用CASE的条件分支25-29使用DO的无条件循环25-30使用WHILE的条件循环25-32终止循环.25-33要根据一定条件执行程序组件,或要将重复语句序列组合在循环中,可以使用ABAP/4提供的用于控制程 序流的标准关键字。ABAP/4也包含重

43、要的附加特征。)中解释。制。为此,可使用其他编程语言(例如,C、 FORTRAN、 PASCAL等等)中熟悉的ABAP/4程序流可以内部控制和外部控制。ABAP/4程序流的内部控制和外部控制之间的差别在ABAP/4中流 控制的概念(页24-2-本节主要讨论内部流控 标准控制关键字。下列主题描述ABAP/4中流控制的概25 T9了 SAP AG第七章:错误!使用25开始1选项卡将Heading 1应用于要在此处显示的文字。与其他高级编程语言一样(如,C、 FORTRAN和PASCAL等等),ABAP/4提供 建字。这些关键字用于_ 分支(IF、CASE)_ 循环(DO、WHILE) 语言不同之也

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

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

46、中选择一个项目时,AT LINE-SELECTION 和 下一个事件关键字之间的所有语句将被处理关于外部控 程序流。制的详细信 息,如事件 及其如何与 ABAP/4程序相互作 用的信息, 参见C通过事件控制 ABAP/4何使用外部控制控制处理块内的程序流。要控制ABAP/4程序中的内 部流,请遵 循结构化编 程原则并将 组成控制结构)。其中的每个语句块都执行主任务的一部分。该节说明如程序模块划分为单个逻辑相关语句块(这些要使程序易 于阅读,应 该缩排控制 结构中的语 辑器功能 “编辑- 插入语句”和“程序- 序布局(页2-6)。句块。出于 整齐打印程布局需要,可以使用 ABA P/4序”(详细

47、信息,参见ABAP/4可以用IF、CASE、 DO和WHILE之类的关键字控制处理块中不同语句之间的程序流。这些语句允许编 条件和无条件的分支 和循环。条 件使用逻辑 表达式,可 以是真,也 可以为假。编程逻辑表达式 使用条件控 制程序中的 内部流。要 用公式指定 条件,请使 用比较数据 字段的逻辑 表达式,如 下所示:语法. vop erator .该表达式比 较两个字段。可能为真,也可能为 假。在带关 键字IF、 逻辑表达式。根据操作数 除上述比较CHECK和WHILE 的条件语句 中使用另外,可以和vF2的数据类型,可以使用 不同的逻辑 运算符。 之外,还可以执行测试以检查数据字段是否完全满足一定将几个逻辑表达式组合为一个简单逻辑表达式允许进行:条件。可以使用这些测试:要比较所有比较所有的字段类型操作数可以 是数据库字 段、内部字 段、文字或 常数。 除基本字

温馨提示

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

评论

0/150

提交评论