数据处理
一、数据的赋值
-
赋值
数据的赋值是程序的常用操作 :
-
MOVE TO
将F1的值存至变量 F2 中,F1与F2可以是不同类型的变量,但有一定限制。
DATA: m_gendle(4) TYPE c. MOVE 'MALE' TO m_gendle. WRITE: m_gendle.
-
WRITE TO .带有格式的赋值
DATA: NAME(20) VALUE 'SOURCE', SOURCE(10) VALUE 'LILY', TARGET(10). WRITE (NAME) TO TARGET. WRITE / TARGET.
•这里的WRITE用于赋值,不是用于输出
-
-
使用偏移
在源字段中取偏移量赋值给目标变量:
MOVE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)
WRITE [+<偏移量>][(<取数位>)] TO [+<偏移量>][(<取数位>)
[+<偏移量>][(<取数位>) = + [+<偏移量>][(<取数位>)]
DATA: F1(10) VALUE 'ABCDEFGHIJ', F2(5). F2 = F1+3(5). WRITE: F1, / F2.
-
字段变量组件的复制
用于结构体的赋值,将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的字段:
MOVE –CORRESPONDING TO .
DATA:BEGIN OF string1, firstname(10) VALUE '11', lastname(10) VALUE 'chou', END OF string1. DATA:BEGIN OF string2, firstname(10), lastname(10), END OF name. MOVE-CORRESPONDING string1 TO string2. WRITE / string2.
-
通过指针实现数据的赋值
指针对象,通过语句FIELD-SYMBOLS加上将括号“<>”来定义。
FIELD-SYMBOLS .
ASSIGN TO .
DATA num TYPE i VALUE 12. FIELD-SYMBOLS:<f1>, <f2> TYPE i, <f3> LIKE num. ASSIGN:num TO <f1>, num TO <f2>, num TO <f3>. WRITE: / num,<f1>,<f2>,<f3>. <f2> = 25. WRITE: / num,<f1>,<f2>,<f3>.
•可以不指定参考类型,用语句ASSIGN来分配给它变量.
• 并不是变量,存放的是变量的地址,而非变量本身。
•如果修改了field symbol的值,则相应的变量的值也随之更改。
二、数据的处理
-
类型转换
•在不同类型的数据对象之间赋值,会自动进行类型的转换;
•转换过程遵照固定的规则,如C类型数据赋值给N类型,只有数字字符被传递,其他忽略;
•C不能直接赋值给I,需要C->N->I;
•可以使用MOVE TO或WRITE TO语句。
DATA: text(10) TYPE c VALUE 'ACBD21231', number(10) TYPE n, int TYPE i. number = text. int = number. WRITE:/ number,int. data:chr type c. field-symbols:<FS> type x, <FC> type c. chr = 'A'. assign chr to <FS> casting. write:/ chr,<FS>. <FS> = <FS>+1. assign <FS> to <FC> casting. move <FC> to chr. write:/ chr,<FS>,<FC>.
-
算数运算符
* 乘
/ 除
+ 加
- 减
DIV 整数除法
MOD 余数除法
运算符与变量之间必须有空格
data:INTEGER type i. compute INTEGER = INTEGER + 10. INTEGER = INTEGER + 10. add 10 to INTEGER. write:/ INTEGER.
-
比较逻辑运算符
比较运算符:
= 或 EQ : 等于
<> 或 >< 或 NE: 不等于
< 或 LT: 小于
<= 或 LE: 小于等于
> 或 GT: 大于
>= 或 GE : 大于等于
逻辑运算符:
AND: 且
OR : 或
NOT : 非
IF 100 > 80. WRITE / 'its true'. ENDIF. IF 100 > 80 AND 90 > 80. WRITE / 'its true'. ENDIF.
-
算数运算函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xb6JM4Rf-1670834733956)(C:\Users\Administrator.BG9592\AppData\Roaming\Typora\typora-user-images\image-20221212142153919.png)]DATA n TYPE p DECIMALS 2. DATA m TYPE p DECIMALS 2 VALUE '-5.55'. n = abs(m). WRITE: 'ABS :',n. n = sign(m). WRITE: /'sign :',n. n = ceil(m). WRITE: /'ceil :',n. n = floor(m). WRITE:/ 'floor :',n. n = trunc(m). WRITE:/ 'trunc :',n. n = frac(m). WRITE:/ 'frac :',n.
-
日期与事件运算
日期数据可以直接运算,如加法和减法的运算data: diff type i, second type i, hours type i. data: t1 type t value '200000', t2 type t value '022222'. diff = t2 - t1. WRITE: / 'diff:',diff. second = diff mod 86400. WRITE: / 'second:',second. hours = second / 3600. WRITE: / 'hours:',hours.
-
时间数据运算
-
时间格式为 ‘hhmmss’
如 '212030’表 ‘21:20:30’
data:hour type i, minutes type i, t type t value '200000', t4 type t value '183000'. hour = ( t2 - t1 ) / 3600. minutes = ( t2 - t1 ) / 60. write: / hour,minutes.
-
字符串数据处理
字符串位移整体或字串进行位移:SHIFT [BY PLACES] []
:
(1).空白, 字符串往左移一位
(2).LEFT, 字符串往左移 n 位
(3).RIGHT, 字符串往右移 n 位
指定字符串c从子串c1进行位移:
SHIFT c UP TO c1
执行结果返回系统参数SY-SUBRC
执行成功,返回0,不匹配,返回4
data:string(10) value 'ABCDEFGHIJ'. shift string. write:/ string. shift string by 2 places right. write:/ string.
DATA:shift_string1(10) VALUE 'ABCDEFGHIJ', shift_string2(10) VALUE 'ABCDEFGHIJ', s_three(4) VALUE 'DEF', s_four(3) VALUE 'DEF'. SHIFT shift_string1 UP TO s_three. WRITE:/ 'shift_string1=',shift_string1,',sy-sub RC=',sy-subrc. SHIFT shift_string2 UP TO s_four. WRITE:/ 'shift_string2=',shift_string2,',sy-sub RC=',sy-subrc.
移除字符串c左边/右边的子字符串c1:
SHIFT c LEFT/RIGHT DELETING LEADING/ TRAILING c1
执行结果返回系统参数SY-SUBRC
执行成功,返回0,不匹配,返回4
data :shift_str1(10) VALUE 'ABCDEFGHIJ', shift_str2(10) VALUE 'ABCDEFGHIJ', shift_str3 type string, m1(4) value 'ABCD', m2(6) value 'HIJ'. shift_str3 = shift_str1. write:/ 'shift_str1=',shift_str1. shift shift_str1 left deleting leading space."删除空格" write:/ 'shift_str1=',shift_str1. shift shift_str1 left deleting leading m1."删除ABCD" write:/ 'shift_str1=',shift_str1. write:/ 'shift_str2=',shift_str2. shift shift_str2 right deleting trailing m2."删除HIJ" write:/ 'shift_str2=',shift_str2. write:/ 'shift_str3=',shift_str3. shift shift_str3 left deleting leading space."删除HIJ"
-
交替字符串
REPLACE WITH INTO
将字符串 中的 以 来取代
data: lv_string(10) value 'ABCDEFGHIJ', str1(3) value 'DEF', str2(3) value '123'. write:/ 'lv_string=',lv_string. replace str1 with str2 into lv_string. write:/ 'lv_string=',lv_string.
-
字符串转换
TRANSLATE TO UPPER/LOWER CASE.
将全部字符转成大写/小写
data:city(9) type c value 'shanghai', country(5) type c value 'CHINA'. translate city to upper case. translate country to lower case. write:/ 'city=',city, / 'country=',country.
-
寻找字符串
从字符串f/表itab中搜索字符串g
SEARCH f/itabFOR g
…ABBREVIATED
从指定字符串中/内表中按顺序/逐行搜索相匹配字符串,搜索单词第一个需与字符串中包含的单词第一个匹配
…STARTING AT n1/line1
从字符串n1个字符/内表中具体某行开始搜索匹配字符串
…ENDING AT n2/line2
搜索到字符串第n2个字符止/最大范围到内表中具体某行
…AND MARK:
从指定字符串/内表中模糊搜索相匹配字符串•会回存至两个变数,SY-SUBRC 和 SY-FDPOS:
若找到则 SY-SUBRC 为 0,SY-FDPOS 存开始位置
若找不到则 SY-SUBRC为 4, SY-FDPOS为 0
对于一些特殊符号,如“”、“@”、“.”等,需要在其两边加上句号作为修饰。如某字符串为"AAABBB",查找符 号"*"的位置
data search_str(50).
move 'welcome to spa world' to search_str.
search search_str for 'wld' ABBREVIATED.
WRITE :/ 'SY-SUBRC=',SY-SUBRC,
/'SY-FDPOS=',SY-FDPOS.
DATA search_str2(50).
move 'AAA*BBB' to search_str2.
search search_str2 for '*'.
WRITE :/ 'SY-SUBRC=',SY-SUBRC,
/'SY-FDPOS=',SY-FDPOS.
•若内表有多行,那么字符串查找位置默认为从某行数据第一位开始
-
字符串合并
将多个字符串合并成一个字符串:
CONCATENATE f1…fn INTO g [SEPARATED BY h]
SPARATED BY表示在连接字符串中加入分隔符号
-
字符串拆分
去除字符串的空格:
CONDENSE c
•字符串前置空格被删除
•NO-GAPS——前置空格以及中间所有空格被删除
-
清除变量内容
CLEAR
•清除变量内容
•常量不能被清空
data: n type i value 100. clear n. write n.