一、数据类型
1 数据类型分类
abap种数据类型大的分类为:基本数据类型、局部数据类型、全局数据类型
基本数据类型:系统预定义的数据类型。
局部数据类型:用于程序内部,可以使用基本数据类型定义或者包含多个基本类型的结构体。
全局数据类型:存在于数据字典中,也叫数据字典类型。常见:数据元素、结构、表类型。所有程序都可以使用,可以用于定义变量。
2基本数据类型8种
数据类型 | 默认大小(byte) | 有效大小 | 初始值 | 说明 | 示例 |
C | 1 character | 1 to 65535
| Space | ‘tom’ | |
N | 1 character | 1 to 65535 | ‘00000’ | 数字字符串 | ‘1234’ |
D | 8位 | ‘00000000’ | 日期 | 20200101 | |
T | 6位 | ‘000000’ | 时间 | 121212 | |
I | 4 BYTE 32位 | -2^31 to 2^31 -1 | 0 | 整数 | |
F | 测试可以无限 | 浮点(科学计数法) | |||
P | 8byte | 2的49次幂到2的50次幂之间 | 压缩 | ||
String | 字符串 |
注意:
F 类型是科学计数法,数据超过17位以上数据运算会失真,谨慎使用。
P类型 压缩型,
定义数据元素时的数据类型30种,在基础数据类型的基础上,专门用来维护数据元素的类型
对应关系
3定义数据变量
data: 定义变量
data : znum type c .
like : 定义时基于实例化对象
data:znum2 like znum 。
type : 用于指定参考数据类型
types:定义结构体
4 运算符
算数运算符
加减乘除模 + - * / mod
比较运算符
= EQ 等于判断
<> NE 不等于
> GT 大于
>= GE 大于等于
< LT 小于
<= LE 小于等于
BETWEEN 之间
IS INITIAL .变量内容为空
字符串运算符
CO 仅包含
CN 不仅包含
CA 包含任何
NA 不包含任何
CS 包含字符串
NS 不包含字符串
CP 包含模式
NP 不包含模式
例子:
S1 CO S2 : S2中的每个字符 在s1中都有 则为真。(注意如果纯数字则0不行)
S1 CN S2 : s1中的其中一个字符不在s2 则为真 。
S1 CA S2 : s2中的其中一个字符在s1 则为真
S1 NA S2 : S2任何字符都不在s1中则为真
S1 CS S2 : 字符串 s1 整体包含s2 为真
S1 NS S2 : 字符串 s1 不整体包含s2 为真
S1 CP S2 : 字符串 s1 包含s2 模式。
S1 = ‘ACDE’ S2 = ‘*CD*’
*表示任意个字符 +表示一个
S1 NP S2 : 字符串 s1 包含s2 模式。
string相关命令
正则
正则用来: 验证字符串是否符合指定特征,查找字符串和用来替换字符串、sql中
常用关键字: find(查找) 、 replace(替代) 、regex(正则表达式)
正则说明
"1.Single Character Patterns
"示例:
"regex:A string:a 结果:不匹配
"regex:AB string:A 结果:不匹配
".,[,],-,^特殊操作字符
".可以替换任意单个字符;
"\使用反斜杠将特殊字符变成普通字符;
"\和一些字符一起表示一组字符(不能再[]中使用):
"1.\C:表示字母字符集;
"2.\d:表示数字字符集;
"3.\D:表示非数字字符集;
"4.\l:表示小写字符集;
"5.\L:表示非小写字符集;
"6.\s:表示空白字符;
"7.\S:表示非空白字符;
"8.\u:表示大写字符集;
"9.\U:表示非大写字符集;
"10.\w:表示字母数字下划线字符集;
"11.\W:表示非字母数字下划线字符集;
"[]表示一个字符集,只需要匹配字符集中一个字符,表示匹配;
"[^x]表示对该字符集取反,只需要不匹配字符集中任意字符,表示匹配;
"[x-x]表示字符集范围,A-Z,a-z,0-1等;
"ABAP定义的字符集
"1.[:alnum:]字母数字集;
"2.[:alpha:]字母集;
"3.[:digit:]数字集;
"4.[:blank:]空白字符,水平制表符;
"5.[:cntrl:]所有控制字符集;
"6.[:graph:]可显示字符集,除空白和水平制表符;
"7.[:lower:]小写字符集;
"8.[:print:]所有可显示字符的集合([:graph:]和[:blank:]的并集);
"9.[:punct:]所有标点字符集;
"10.[:space:]所有空白字符、制表符和回车符的集合;
"11.[:unicode:]字符表示大于255的所有字符集(仅在Unicode系统中);
"12.[:upper:]所有大写字符集;
"13.[:word:]包括下划线在内的所有字母数字字符集_;
"14.[:xdigit:]所有十六进制数字的集合(“0”-“9”,“A”-“F”,和“A”-“F”);
"示例:
"regex:\. string:. 结果:匹配
"regex:\C string:A 结果:匹配
"regex:.. string:AB 结果:匹配
"regex:[ABC] string:A 结果:匹配
"regex:[AB][CD] string:AD 结果:匹配
"regex:[^A-Z] string:1 结果:匹配
"regex:[A-Z-] string:- 结果:匹配
使用regex实现
替换字符串中的 非数字
REPLACE ALL OCCURRENCES OF REGEX '[^0-9]' IN lv_bstkd WITH space
使用类实现
在ABAP中定义了两个类来实现相应功能,分别是CL_ABAP_REGEX 和CL_ABAP_MATCHER
*正则表达式验证
IF cl_abap_matcher=>matches(
pattern = '^(^[\-0-9][0-9]*(.[0-9]+)?)$'
text = '1.01a' ) = abap_true.
WRITE '数字'.
ELSE.
WRITE '非数字'.
ENDIF.
查找
*正则表达式查找
DATA: lv_string TYPE string VALUE '广东省珠海市香洲区中山路'.
DATA: lt_result TYPE TABLE OF match_result,
wa_result TYPE match_result.
FIND ALL OCCURRENCES OF PCRE '(.+?[省])?(.+?[市])?(.+?[区])?(.*)?' IN lv_string IGNORING CASE RESULTS lt_result.
LOOP AT lt_result INTO wa_result WHERE offset >= 0 .
WRITE:/ lv_string+wa_result-offset(wa_result-length).
ENDLOOP.
ULINE.
*读取捕获的分组值
LOOP AT lt_result INTO wa_result.
DATA(lt_submatches) = wa_result-submatches.
LOOP AT lt_submatches INTO DATA(wa_submatches) WHERE offset >= 0.
WRITE:/ lv_string+wa_submatches-offset(wa_submatches-length).
ENDLOOP.
ENDLOOP.
1 *正则表达式替换 2 DATA text TYPE string VALUE '-hubinshishuibuzhidao-'. 3 REPLACE ALL OCCURRENCES OF PCRE 'sh.?i' IN text WITH 'FFF'. 4 WRITE:/ text.
5数据字典中的数据类型
se11创建数据类型
数据元素:全局的自定义数据类型。可以基于预定义的数据类型定义,也可以使用 域定义。
结构: 全局的结构类型 。类似于全局的 types。
表类型:基于行类型创建。主要用于接口中。
二、域
se11
基于基本数据类型创建,可以指定数据范围 。数据范围可以是 固定几个,也可以是范围,也可以是某个表中的数据。
三、搜索帮助
SE11 创建
常用于某个字段可以基于某个配置表进行搜索。
以下例子是 创建搜索帮助: ZH_SFXCP ,该搜索帮助基于表 ZTSFXCP, 在创建其他字段时可以指定该搜索帮助。
1 配置表:ZTSFXCP
2 基于配置表创建搜索帮助
3 在表中的字段上指定该搜索帮助(创建表或创建数据元素时指定搜索帮助)
4 效果
四、消息message
系统自带和自建消息在表t100 ,tcode:se91
可以用于问题的调试
1 直接弹出消息
Message ‘mes’ type ‘I’ .
2 使用系统自带消息
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
3 自定义消息
自定义消息类SE91,例如:zmesg
使用
须在报表中声明 MESSAGE-ID ZMSEG .
sap系统的提示方式有两种:
1. MESSAGE I002(ZFI) with ‘文本1’ ‘文本2’ .
2. MESSAGE ID ' ZFI ' TYPE 'I' NUMBER '002' with ‘文本1’ ‘文本2’ .
消息使用
一般在调用bapi根据返回的消息 是否包含 EAX 来处理错误