该语句除了将字段总与添加到4、3数学函数
以下内部函数使用所有三种数值数据类型( 函数 ABS SIGN 参数符号:1 -1 CEIL FLOOR TRUNC
F、I与P)作为参数。
结果 参数得绝对值 X > 0 X < 0 不小于参数得最小整数值 不大于参数得最大整数值 参数得整数部分 参数得分数部分 SIGN( X) = 0 if X = 0 FRAC 4、4浮点函数
以下内部函数用浮点数据类型( F)作为参数。 函数 ACOS ASIN、ATAN; COS SIN、TAN COSH SINH、TANH EXP LOG LOG10 SQRT 对于所有函数,正常数学约束适用。否则,会产生运行错误。 解释 三角函数 反三角函数 基数为e 得求幕函数(e=2、7182818285) 基数为e得自然对数 基数为10得对数 平方根 五字符串
5、1移动字符串
5、1、1按给定位置数移动字符串
要按给定位置数移动字段内容,使用
SHIFT语句,用法如下:
SHIFT <c> [BY <n> PLACES] [<mode>]、
该语句将字段<c>移动 <门>个位置。如果省略BY <n> PLACES则将<n>解释为一个位置。 如果<n>就是0或负值,贝U <c>保持不变。如果<n>超过<c>长度,则<c>用空格填充。<n>可 为变量。
对不同(<mode>选项,可以按以下方式移动字段
<c>:
LEFT:向左移动<n>位置,右边用<n>个空格填充(默认设置)
CIRCULAR向左移动<n>位置,以便左边 <n>个字符出现在右边。 5、1、2移动字符串到给定串位置
要移动字段内容以到给定串位置,则使用 SHIFT <c> UP TO <str><mode>、 ABAP/4查找<c>字段内容直到找到字符
<str>并将字段<c>移动到字段边缘。<mode> SHIFT语句,用法如下:
串 选项与按给定位置数移动字符串中所述相同。 <str>可为变量。
RIGHT:向右移动<n>位置,左边用<n>个空格填充。
如果<c>中找不到<str>,则将SY-SUBRC设置为4并且不移动<c>。否则,将SY-SUBRC 设置为0。
5、1、3根据第一个或最后一个字符移动字符串
假设第一个或最后一个字符符合一定条件, 为此,请使用以下语法:
则可用SHIFT语句将字段向左或向右移动。
SHIFT <c>LEFT DELETING LEADING <str> 、 SHIFT <c> RIGHT DELETING TRAILING <str> 、 假设左边得第一个字符或右边得最后一个字符出现在 向右移动。字段右边或左边用空格填充, <str> 可为变量。
<str>中,该语句将字段<c>向左或
5、2 替换字段内容
要用其它字符串替换字段串得某些部分,使用
REPLACE 语句。
REPLACE <str1> WITH <str2> INTO <c> [LENGTH <l>] 、
ABAP/4搜索字段<c>中模式<str1>前<1>个位置第一次出现得地方。如果未指定长度, 按全长度搜索模式<str1>。然后,语句将模式<str1>在字段<c>中第一次出现得位置用字符 串<str2>替换。
如果指定长度 <l> ,则只替换模式得相关部分。如果将系统字段 SY-SUBRC 得返回代码 设置为0,则说明在<c>中找到<str1>且已用<str2>替换。非0得返回代码值意味着未替换。 <str1> 、<str2> 与 <len> 可为变量。
5、3 大小写转换并替换字符串
可以将字母转换大/小写或使用替换规则。要转换大 /小写,使用TRANSLATE语句,用 法如下: TRANSLATE <c> TO UPPER CAS、E TRANSLATE <c> TO LOWER CAS、E
这些语句将字段<c>中得所有小写字母转换成大写或反之。 使用替换规则时,使用以下语法: TRANSLATE <c> USING <r>、
该语句根据字段<r>中存储得替换规则替换字段 <c>得所有字符。<r>包含成对字母,其 中每对得第一个字母用第二个字母替换。
<r>可为变量。
5、4 转换为可排序格式
可以将字符字段转换为可按字母顺序排列得格式:
CONVERT TEXT <c> INTO SORTABLE CODE <sc、>
该语句为字符字段<c>填充可排序目标字段<sc>。字段<c>必须就是类型C且字段<sc> 必须就是类型X,最小长度为<c>长度得16倍。
该语句目得就是为字符字段 <c>创建相关字段<sc>,作为<c>得按字母顺序排列得排序关 键字。在内表得内容与已解压缩得数据中进行排序。
如果对未转换得字符字段进行排序, 则系统创建与各字母得特定平台内部编码相对应得
顺序。在对目标字段进行排序之后,转换 CONVERTTEXT按这样得方式创建目标字段,相应
得字符字段顺序按字母排序。 例如,在德语中,顺序为‘ Miller 、Moller、Miler、Muller ' 而不就是'Miller 、Moller、Muller、Mller '。
转换方法依赖于运行 ABAP/4程序得文本环境。文本环境在用户主记录中定义。 就是可以使用如下语句,在程序中设置文本环境:
SET LOCALE LANGUAGE <lg> [COUNTRY <cy>] [MODIFIER <m>]、 该语句根据语言<lg>设置文本环境。对于选项COUNTRY只要特定国家语言不同, 以在语言以外指定国家。对于选项
MODIFIER,只要一个国家内语言不同,就可以指定另一
就可 例外得
个标识符,例如,排序顺序在电话簿与词典之间不同。
字段<lg>、<cy>与<m>必须就是类型 C且长度必须与表 TCP0C得关键字段长度相等。 表TCP0C就是一个表格,从中进行平台相关得文本环境维护。在语句 系统根据TCP0C中得条目设置文本环境。除了内部传送得平台特性之外,用
SET LOCALE期间,
SET语句指定
表关键字。如果<lg>等于SPACE,则系统根据用户主记录设置文本环境。如果对于指定得 关键字在表中无条目,则系统将产生运行错误。
文本环境影响ABAP/4中依赖于字符集得所有操作。
5、5覆盖字符字段
要用另一字符字段覆盖字符字段,使用
OVERLAY语句,用法如下:
OVERLAY <c1> WITH <c2> [ONLY <str>]、
该语句用<c2>得内容覆盖字段<c1>中包含<str>中字母得所有位置。<c2>保持不变。如 果省略ONLY <str>,则覆盖字段<c1>中所有包含空格得位置。
如果至少要替换<c1>中得一个字符,则将SY-SUBRC设置为0。对于所有其它情况, 将 SY-SUBRC设置为4。如果<c1>比<c2>长,则只覆盖<c2>中得长度。
5、6搜索字符串
要搜索特定模式得字符串,请使用
SEARC H语句,用法如下:
SEARCH <c> FOR <str><optio ns>、
该语句在字段<c>中搜索<str>中得字符串。如果成功,则将SY-SUBRC得返回代码值设 置为0并将SY-FDPOS设置为字段<c>中该字符串得偏移量。否则将 搜索串<str>可为下列格式之一: 目得 搜索<pattern> (任何字符顺序)。忽略尾部空格 SY-SUBRC设置为4。、 、 * * 搜索<pattern>,但就是不忽略尾部空格 搜索以<pattern>结尾得词 搜索以<pattern>开始得词 单词之间用空格、逗号、句号、分号、冒号、问号、叹号、括号、斜杠、加号与等号等 分隔。搜索字符字段<c>得各种选项(<options> )如下 ( 1) ABBREVIATED
在字段<c>中搜索包含<str>中指定字符串得单词, 其中字符可能被其它字符隔开。 单词 与字符串得第一个字母必须相同。
( 2) STARTING AT <n1>
在字段<c>中搜索从<n1>开始得<str>。结果SY-FDPOS参照相对于<n1>得偏移量而不就 是字段得开始。
(3)
ENDING AT <n2>
在字段<c>搜索<str>直到位置<n2>。 ( 4) AND MARK
如果找到搜索串,则将搜索串中得所有字符(与使用 换为大写形式。
ABBREVIATED时得所有字符)转
5、7 获得字符串长度
要决定字符串到最后一个字符而不就是 下:
[COMPUTE] <n> = STRLEN(<c> ) 、
STRLEN将操作数<c>作为字符数据类型处理,而不考虑其实际类型。不进行转换。关键 字COMPUTE可选。
SPACE得长度,使用内部函数STRLEN用法如
5、8 压缩字符串去空格
要删除字符字段中多余空格,使用 CONDENSE <c> [NO-GAPS、]
该语句去除字段<c>中得前导空格并用一个空格替换其它空格序列。结果就是左对齐单 词,每个单词用空格隔开。如果指定附加得
NO-GAPS则去除所有空格。 CONDENSE语句,用法如下:
5、9 连接字符串
要将单个字符串连接成一体,使用
CONCATENATED句,用法如下:
CONCATENATE <c1>、、、 <cn> INTO <c> [SEPARATED BY <s>] 、
该语句连接字符串<c1>与<cn>并将结果赋给<c>。
该操作忽略尾部空格。附加 SEPARATELY <s>允许指定字符字段<s>,它放置在单个字 段间已定义得长度中。
如果结果符合 ,则将SY-SUBRC设置为 0。然而,如果结果必须被截断,则将 SY-SUBR(设置为 4。5、10拆分字符串
要将字符串拆分成两个或更多小串,使用 SPLIT AT INTO SPLIT语句,用法如下:
、、、 、该语句在字符字段搜索分界字符串,并将分界符之前与之后得部分放到目标字 段、、、 中。要将所有部分放到不同目标字段中,必须指定足够目标字段。否则,用字段 部分填充最后目标字段并包含分界符。
如果所有目标字段足够长且不必截断任何部分,则将 设置为4。
SY-SUBRC设置为0。否则,将其
得剩余5、11分配字符串部分
MOVE语句得以下变体只使用类型 C字段: MOVE TO PERCENTAGE[RIGHT]、
将左对齐得字符字段得百分比(或如果用RIGHT选项指定,则为右对齐)复制 到。值可为0与100之间得任何数。将要从 复制得长度取整为下一个整数。 如果语句中某一参数不就是类型C,则忽略参数 PERCENTAGE
六逻辑流控制
6 1比较运算符
要比较所有得字段类型,可以在逻辑表达式中使用下列运算符: <运算符> 含义 EQ = NE <> >< LT < LE 等于 等于 不等于 不等于 不等于 小于 小于 小于等于 <= GT > GE >= 小于等于 大于 大于 大于等于 大于等于 「 操作数可以就是数据库字段、内部字段、文字或常数。
除基本字段外,还可以将结构数据类型与上表中得运算符结合起来作为操作数。 逐个组件进行比较,嵌套得结构分为基本得字段。
如果有意义,可以对不同数据类型得字段进行比较。 在比较之前,系统将按照下列层次规则执行自动类型转换:
(1) 如果操作数之一就是浮点数(类型 F),则系统将其它操作数转换为类型 (2) 如果操作数之一就是压缩字段(类型 P),则系统将其它操作数转换为类型
F。 P。
如果字段可转换,就可以进行比较。
字段串
(3) 如果操作数之一就是日期字段(类型 D)或时间字段(类型 T),则系统将其它操 作数转换为类型 D或T。不支持日期与时间字段之间得比较,这会导致程序中断。
(4)
如果操作数之一就是字符字段 (类型C)且其它操作数就是十六进制字段 (类型X), 则
系统将类型X得操作数转换为类型 C。
(5)
如果操作数之一就是字符字段(类型 C),其它操作数为数字字段(类型 N),则
P。
系统将这两种操作数都转换为类型
6 2比较字符串与数字串
要比较字符串(类型C)与数字文本(类型N),可以在逻辑表达式中使用下列运算符。
<运算符> CO CN CA NA CS NS CP NP 含义 仅包含 不仅包含 包含任何 不包含任何 包含字符串 不包含字符串 包含模式 不包含模式 所以,在进行包含这些运算
因为除类型N与C外,系统不能执行任何其它类型转换, 之一得比较时,操作数应该就是类型
运算符得功能如下: (1)
CO (仅包含)
N或C。
如果<f1>仅包含<f2>中得字符,则逻辑表达式 <f1> CO <f2>为真。该比较区分大小写, 并包括尾部空格。如果比较结果为真,则系统字段
SY-FDPOS包括<f1>得长度。如果为假,
则SY-FDPOS包含<f1>中第一个未在<f2>内出现得字符得偏移量。
(2)
CN (不仅包含)
如果<f1>还包含<f2>之外得其她字符,则逻辑表达式 <f1> CN<f2>为真。该比较区分大 小写,并包括尾部空格。如果比较结果为真, 则系统字段SY-FDPOS包含<f1>中第一个未同 时在<f2>中出现得字符得偏移量。如果为假, SY-FDPOS包含<f1>得长度。
(3) CA (包含任何 )
如果<f1>至少包含<f2>得一个字符,则逻辑表达式 <f1> CA<f2>为真。该比较区分大小 写。如果比较结果为真,则系统字段SY-FDPOS包含<f1>中第一个也在<f2>中出现得字符得 偏移量。如果为假,SY-FDPOS包含<f1>得长度。
(4) NA (不包含任何 )
如果<f1>不包含<f2>得任何字符,则逻辑表达式<f1> NA<f2>为真。该比较区分大小写。 如果比较结果为真, 则系统字段SY-FDPOS包含<f1>得长度。如果为假,则SY-FDPOS包含 <f1>中在<f2>内出现得第一个字符得偏移量。
(5) CS ( 包含字符串 )
如果<f1>包含字符串<f2>,则逻辑表达式<f1> CS<f2>为真。忽略尾部空格并且比较不 区分大小写。如果比较结果为真,
则系统字段SY-FDPOS包含<f2>在<f1>中得偏移量。如果
为假,SY-FDPOS包含<f1>得长度。
(6) NS ( 不包含字符串 )
如果<f1>不包含字符串<f2>,则逻辑表达式<f1> NS<f2>为真。忽略尾部空格且比较不 区分大小写。如果比较为真,系统字段
SY-FDPOS包含<f1>得长度。如果为假,系统字段
SY-FDPOS包含<f2>在<f1>中得偏移量。
(7) CP ( 包含模式 )
如果<f1>包含模式<f2>,则逻辑表达式<f1> CP<f2>为真。如果<f2>属于类型C,则可 以在 <f2> 中使用下列通配符:
15 * 用于任何字符串 15 + 用于任何单个字符
忽略尾部空格且比较不区分大小写。
如果比较结果为真, 系统字段SY-FDPOS包含<f2>
在<f1>中得偏移量。如果为假, SY-FDPOS包含<f1>得长度。
如果要对 <f2> 中得特殊字符进行比较, 请将换码符 # 放到其前面。 可以使用换码字符 # 指定: 15 大小写字符
15 通配符 \"*\"( 输入 #*) 15 通配符 \"+\" ( 输入 #+)
15 换码符号本身 ( 输入 ##) 15 字符串结尾得空格 ( 输入 #___) (8)
NP (不包含模式)
如果<f1>不包含模式<f2> ,则逻辑表达式<f1> NP<f2>为真。在<f2>中,可以使用与 CP 相同得通配符与换码字符。忽略尾部空格且比较不区分大小写。 如果比较结果为真,贝U系统 字段SY-FDPOS包含<f1>得长度,如果为假, SY-FDPOS包含<f2>在<f1>中得偏移量。
6 3比较二进制位结构
要将逻辑表达式初始操作数第一字节得二进制位结构与第二操作数得进行比较, F列操作符。
<运算符> O Z M 第二操作数得长度应为一个字节。 请使用
含义 二进制位就是1 二进制位就是0 混合二进制位 没有必要对第二操作数使用长度为 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>为真。
6 4编程分支与循环
6、4、1 IF条件分支
IF语句允许依据条件将程序流转到特定得语句块中。该语句块包括 得ELSEIF、ELSE或ENDIF之间得所有命令。 IF <con diti on1> 、
vstateme nt block> ELSEIF ELSEIF ELSE、 ENDIF、 如果第一个条件就是真,系统将执行所有语句直到第一个语句块结束,然后继续处理
IF语句及其后面
ENDIF 语句之后得程序。要采用选择性条件,可以使用 ELSEIF 语句。如果第一个条件就是 假,系统使用与 IF 语句一样得方式处理后面得 ELSEIF 语句。 如果 IF 或 ELSEIF 条件都 为假,则执行 ELSE 开始得语句块。最后得语句块必须用 ENDIF 结束。
要用公式表达 IF 与 ELSEIF 语句中得条件, 可以使用任何编程逻辑表达式描述得逻辑 表达式。 6、4、2CASE条件分支
要根据特殊数据字段得内容执行不同得语句块,可以如下使用 CASE 、 WHEN 、 WHEN 、 WHEN 、 WHEN 、、、CASE 语句:
、、、、、、 WHEN OTHERS、 ENDCAS、E系统执行 WHEN语句之后得语句块,如果内容等于得内容,且继续处理ENDCASE 语句后面得语句。如果 得内容不等于得内容,则执行选项 WHENOTHERS后面得语句 块。最后得语句块必须用 ENDCASE结束。 6、4、3D0无条件循环如果想要多次执行语句块,则可以如下使用 DO 语句编程循环: D0 [ TIMES] [VARYING FR0M NEXT ] ENDDO在发现EXIT、STOP或REJECT语句之前,系统继续执行由 语句块。
DO弓I导、ENDDC结束得 、
可以使用TIMES选项循环次数。<n>可以就是文字或变量。如果<n>就是0或负数, 系统不执行该循环。
系统字段SY-INDEX中包含已处理过得循环次数。 6、4、4WHILE条件循环
如果只要条件为真,就不止一次执行语句,可以如下使用
WHILE语句编程:
WHILE <co nditio n> [VARY <f> FROM <f1> NEXT <f2>] 、
vstateme nt block>
ENDWHILE
只要<con diti on>就是真,或系统发现EXIT、STOP或REJECT语句,系统将继续执行 由 WHILE语句引导、
ENDWHILE结束得语句块。
对于<condition> ,可以使用编程逻辑表达式中描述得任何逻辑表达式。 系统字段SY-INDEX中包含已执行得循环次数。 可以任意嵌套 WHILE循环,也可与其她循环结合使用。
WHILE语句得VARY选项与DO循环得VARYING选项工作方式一样。允许每次执行循 环时为变量<f>重新赋值。<f1>、<f2>、<f3>、、、、必需就是内存中类型相同与长度相等 得一系列等距字段。第一次循环时,将
<f1>分配给<f>,第二次循环时,将 <f2>分配给<f>,
以此类推。可以在一个 WHILE语句中使用多个 VARY选项。
& 5终止循环
要终止循环过程,请使用下列关键字之一。
关键字 CONTINUE CHECK
用途 无条件终止循环过程 有条件终止循环过程 完全终止循环 CHECK与EXIT,分别完成
EXIT 在循环中只能使用 CONTINUE但在循环外还可使用关键字 不同得功能。 6、5、1无条件终止
要立即无条件终止循环,请如下使用 CONTINUE
CONTINUE语句:
在CONTINUE语句之后,系统跳过当前语句块中所有剩余语句块,继续该语句后面得循 环。
6、5、2 有条件终止
要有条件终止循环过程,请如下使用 CHECK 语句: CHECK 、如果条件就是假, 系统跳过当前语句块中所有剩余语句块, 继续后面得循环过程。 对于 ,可使用编程逻辑表达式中描述得任何逻辑表达式。 6、5、 3 完全终止要无条件完全终止循环,请如下使用 EXIT 语句: EXIT、
EXIT语句之后,系统立即退出循环,继续结束语句 后面得处理。在嵌套循环中,系统仅退出当前循环。
(ENDDO ENDWHILE ENDSELECT)
七内表
7、1 创建内表
TYPES: BEGIN OF OCCURS , ,、、、、、、、、、、、、、、
END OF 、DATA: TYPE STANDARD OF , TYPE 、其作用与先创建字段串,然后再创建与该字段串行结构相同得内表 定行得初始号。将第一行写入用类型相同。