字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time)

1. 字符串连接
CONCATENATE dobj1 dobj2 ... INTO result
 [IN { BYTE | CHARACTER } MODE]
 [SEPARATED BY sep].

2.字符串分隔, split 一个string的部分到一个内表或一系列的变量
SPLIT dobj AT sep INTO
 { {result1 result2 ...} | {TABLE result_tab} }
 [IN {BYTE|CHARACTER} MODE].

3. 字符串查找, 在一个字符串中查找模式串(FIND or SEARCH)
FIND sub_string
 IN SECTION [OFFSET off] [LENGTH len] OF dobj --> 灰色部分用来缩小目的串被查找的范围
 [ IN { BYTE | CHARACTER } MODE ]
 [ { RESPECTING | IGNORING } CASE ]
 [ MATCH OFFSET moff ] [MATCH LENGTH mlen ].

FIND 'knows'
 IN SECTION OFFSET 5 OF 'Everybody knows this is nowhere'
 MATCH OFFSET moff " => moff = 10
 MATCH LENGTH mlen. " => mlen= 5

在字符串dobj中查找pattern
SEARCH dobj FOR pattern [IN { BYTE | CHARACTER } MODE]
 [STARTING AT p1] [ENDING AT p2]
 [ABBREVIATED]
 [AND MARK].
if sy-subrc = 0. then SY-FDPOS = 返回pattern在dobj中的位置
About pattern:
'pat' - 忽略尾部空格
'.pat.' -不忽略尾部空格
'*pat' - 以pat结尾
'pat*' - 以pat开始
单词是指: 用 空格 , ; : ? ! () / + =分隔的字串

SEARCH <c> FOR <str> <options>.

该语句在字 段 <c> 中搜索<str> 中的字符串 。如果成功 ,则将 SY-SUBRC 的返回代码 值设置为0并 将 SY-FDPOS 设置为字段 <c> 中该字符串 的偏移量。 否则将 SY-SUBRC 设置为4。

example:
==============================

PHP code:



DATA STRING(30) VALUE 'This is a little sentence.'.SEARCH STRING FOR 'itt'.WRITE: / 'itt ', SY-SUBRC, SY-FDPOS.
< font>

输出
==========================
itt          0       11


4. 字符串替换
REPLACE SECTION [OFFSET off] [LENGTH len]
 OF dobj WITH new
 [IN { BYTE | CHARACTER } MODE].

REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]
 [SUBSTRING] sub_string
 IN [SECTION [OFFSET off] [LENGTH len] OF ] dobj WITH new
 [IN {BYTE|CHARACTER} MODE]
 [{RESPECTING|IGNORING} CASE]
 [REPLACEMENT COUNT rcnt]
 [REPLACEMENT OFFSET roff]
 [REPLACEMENT LENGTH rlen].
eg:
DATA: text1 TYPE string VALUE 'xababx'.
REPLACE 'ab' IN text1 WITH 'xx'. --> xxxabx

5. 去前导0 (Remove leading zero)
SHIFT dobj LEFT DELETING LEADING '0'.
FM : CONVERSION_EXIT_ALPHA_OUTPUT

增前导0 (Add leading zero)
DATA v_s(5).
UNPACK '123' to v_s. ==> v_s = '00123'
FM: CONVERSION_EXIT_ALPHA_INPUT

SHIFT dobj
 [{BY num PLACES} | {UP TO sub_string}]
 [LEFT|RIGHT] [CIRCULAR]
SHIFT dobj
 {LEFT DELETING LEADING} | {RIGHT DELETING TRAILING} pattern.
 [IN {BYTE|CHARACTER} MODE].

6. 字符串的长度, 内表的行数
 STRLEN( dobj) 字符串的长度
 LINES( itab ) 内表的行数

7. 删字符串中的空格: CONDENSE text [NO-GAPS].

8. 大小写转换,字符变换
TRANSLATE text {TO {UPPER|LOWER} CASE} | {USING pattern}.
eg: text = `Barbcbdbarb`.
TRANSLATE text USING 'ABBAabba'. =>'Abracadabra'

9. CONVERT
CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]
 INTO TIME STAMP time_stamp TIME ZONE tz.

CONVERT TIME STAMP time_stamp TIME ZONE tz
 INTO [DATE dat] [TIME tim]
 [DAYLIGHT SAVING TIME dst].

CONVERT TEXT text INTO SORTABLE CODE hex.

10. OVERLAY text1 WITH text2 [ONLY pattern].
如果不指定后面的ONLY pattern, text1中的空格会被text2中的对应字符替代
如果指定只有匹配的字符才会被替代,注意大小写敏感

11. 模式匹配
CO / CN contains only or not
CA / NA contains any or not any
CS / NS contain string or not
CP / NP contains pattern or not

NOTE:
a) . CO, NO, CA, NA比较时区分大小写, 并且尾部空格也在比较的范围之内
data: s1(10) value 'aabb'.
if s1 co 'ab' ==> false
if s1 co 'ab ' ==>true
CS, NS, CP, NP不区分大小写和尾部空格

b) .对于CP, NP
* = \s?
+ = \s
# 换码字符, 用于匹配 *, +这样的字符
 ##
 #*
 #+
 #___ 比较结尾空格
 #[a-z] 在CP, NP中强制区分大小写

c) . 比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息

 

操作符

说明

CO

操作字符串1中每个字符都在操作字符串2中存在,则表达式为true,反之为false.表达式为true时sy-fdpos = 操作字符串1的长度,为false时,sy-fdpos =  操作字符串1中不在操作字符串2中的字符所在作字符串1中第一个位置。

CN

操作字符串1中不是每个字符都在操作字符串2中存在,则表达式为true,反之为false.表达式为false时sy-fdpos = 操作字符串1的长度,为true时,sy-fdpos =  操作字符串1中不在操作字符串2中的字符所在作字符串1中第一个位置。

CA

操作字符串1中任意字符在操作字符串2中存在,则表达式为true,sy-fdpos = 第一个出现在操作字符串2中的字符所在操作字符串1中的第一个位置。反之为false ,sy-fdpos = 操作字符串1长度。

NA

操作字符串1中任意字符在操作字符串2中不存在,则表达式为true,sy-fdpos = 操作字符串1长度。反之为false ,sy-fdpos = 第一个出现在操作字符串2中的字符所在操作字符串1中的第一个位置。

CS

操作字符串1中任意字符串在操作字符串2中存在,则表达式为true,sy-fdpos = 第一个出现在操作字符串2中的字符串的第一个字符所在操作字符串1中的第一个位置。反之为false ,sy-fdpos = 操作字符串1长度。如果操作字符串1为空操作字符串2不空则表达式为false,sy-fdpos = 0.

NS

操作字符串1中任意字符串在操作字符串2中不存在,则表达式为true,sy-fdpos = 操作字符串1长度。反之为false ,sy-fdpos = 第一个出现在操作字符串2中的字符串的第一个字符所在操作字符串1中的第一个位置。

CP

操作字符串1与操作字符串2中字符完全匹配,操作字符串2中输入通配符 “*”代表任意字符串,“+”任意字符。如果匹配则表达式为true,sy-fdpos = 操作字符串1中与操作字符串2中除操作通配符外的第一个字符位置。反之为false ,sy-fdpos =操作字符串1的长度。

NP

操作字符串1与操作字符串2中字符不完全匹配,操作字符串2中输入通配符 “*”代表任意字符串,“+”任意字符。如果匹配则表达式为true,sy-fdpos =操作字符串1的长度。反之为false ,sy-fdpos = 操作字符串1中与操作字符串2中除操作通配符外的第一个字符位置。


12. 特殊字符
在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES. 里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.

13. 字符串位操作
DATA: v_s(10) value 'abcd'.
v_s+0(1) = 'b'.
v_s+2(*) = '12'.
=> v_s = 'bb12'.

============================================================
============================================================
ABAP對字串的操作方法與其他語言的操作有較大差別,以下是較常用的對字串操作的方法:

1. 字串的連接:CONCATENATE
DATA: t1 TYPE c LENGTH 10 VALUE 'We',
t2 TYPE c LENGTH 10 VALUE 'have',
t3 TYPE c LENGTH 10 VALUE 'all',
t4 TYPE c LENGTH 10 VALUE 'the',
t5 TYPE c LENGTH 10 VALUE 'time',
t6 TYPE c LENGTH 10 VALUE 'in',
t7 TYPE c LENGTH 10 VALUE 'the',
t8 TYPE c LENGTH 10 VALUE 'world',
result TYPE string.

CONCATENATE t1 t2 t3 t4 t5 t6 t7 t8 INTO result. "直接連接
CONCATENATE t1 t2 t3 t4 t5 t6 t7 t8 INTO result SEPARATED BY space. "用空格將每個字串連接

2. 拆分字串: SPLIT
DATA: str1 TYPE string,
str2 TYPE string,
str3 TYPE string,
itab TYPE TABLE OF string,
text TYPE string.

text = `What a drag it is getting old`.
SPLIT text AT space INTO: str1 str2 str3,
TABLE itab.

3. 去除多余的空格:CONDENSE
DATA: BEGIN OF sentence,
word1 TYPE c LENGTH 30 VALUE 'She',
word2 TYPE c LENGTH 30 VALUE 'feeds',
word3 TYPE c LENGTH 30 VALUE 'you',
word4 TYPE c LENGTH 30 VALUE 'tea',
word5 TYPE c LENGTH 30 VALUE 'and',
word6 TYPE c LENGTH 30 VALUE 'oranges',
END OF sentence,
text TYPE string.

text = sentence.
CONDENSE text.“在每個連接串中間會有一個空格
CONDENSE text No-GAPS. "在後面加入NO-GAPS後,所有空格都會去除。

4.字串轉換:TRANSLATE
DATA text TYPE string.
text = `Careful with that Axe, Eugene`.
TRANSLATE text TO UPPER CASE. "轉大寫
TRANSLATE text TO LOWER CASE. "轉小寫

  DATA text TYPE string.
text = `Barbcbdbarb`.
TRANSLATE text USING 'ABBAabba'. “A與B換轉 a與b換轉

5.取字串長度:STRLEN
data text type c length 20.
data: ilen type i.
text = `Barbcbdbarb`.
ilen = strlen( text ). "字串實際長度(11)
describe field text length ilen in byte mode. "字串定義時的字節長度,一個長度等2個字節(40)
describe field text length ilen in character mode. "字串定義的長度(20)

6.截取子字串
data: text type c length 10.
data: ilen type i.
data: subtext type c length 5.
text = 'ABCDEFGHIJ'.
subtext = text+0(5). "取左邊5個字符('ABCDE')
subtext = text+3(5). "從第四個字串起取5個字符('DEFGH)
text+0(1) = 'Z'. "將第一個字符變爲'Z'
注意:+兩邊不能有空格。 

REPORT  Z124101.

DATA string7(30) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.

ULINE /1(26).

SEARCH string7 FOR 'X'.

WRITE: / 'X', sy-subrc UNDER 'SY-SUBRC',

sy-fdpos UNDER 'SY-FDPOS'.

write:/ '看这里的数据'.

ABAP常用字符串操作相关推荐

  1. ABAP常用字符串操作收集整理

    字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time) 1. 字符串连接 CONCATENATE dobj1 ...

  2. C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

    参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 作者:一只青木呀 ...

  3. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  4. 面向OLAP的列式存储DBMS-11-[ClickHouse]的常用字符串操作

    ClickHouse 字符串的相关操作函数 1 常用函数 1.1 empty和notEmpty empty:检测一个字符串是否为空,为空返回 1,不为空返回 0. notEmpty:检测一个字符串是否 ...

  5. 一些常用字符串操作函数的内部实现

    我整理了一下常用的字符串库函数的内部实现,截自linux内核中的lib/string.c文件,绝对标准的程序,供大家参考. memset: /** memset - Fill a region of ...

  6. Oracle常用字符串操作

    参考: 一.oracle操作字符串:拼接.替换.截取.查找: 二.oracle中的trim函数使用介绍 --字符串去空格 --输出:a b c; SELECT TRIM(' a b c ') || ' ...

  7. java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数

    package com.xxx.controller.api; import org.apache.commons.lang.StringUtils; public class Test { publ ...

  8. Python3常用字符串操作

    1. str.strip去掉字符串首位指定的字符,默认去掉空白字符 intput=" nnn入门小站nnn " print('[%s]' % input) # strip不会改变原 ...

  9. mysql 常用字符串操作

    SET @L=16, @i=3; SELECT *,CONCAT( LEFT(tag2,@i-1) ,'W', RIGHT(tag2,@L-@i)) from tb_main LIMIT 1,10; ...

最新文章

  1. 维护学习的一点体会与看法
  2. mybaits四-2:模糊查询
  3. 形态分类法的迭代次数与成键的稳定性
  4. select poll 与epoll模型的总结
  5. 40无法u盘启动_戴尔主板bios设置u盘启动 戴尔台式电脑如何bios设置U盘启动教程...
  6. 不同种类的ICP算法
  7. 用python自己做游戏_练习项目20:使用python制作游戏(中)
  8. AD18等长线、蛇形线的设置
  9. Java| Javadoc生成Java帮助文档
  10. Python 之 烤地瓜
  11. 雷柏M300G使用体验
  12. CAD标注如何提取下来?这样提取很容易
  13. 2023最新素材解析网站源码搭建和原理,附带PHP小例子。
  14. 错误解决:There is no screen to be resumed matching
  15. 南京大学2021计算机考研复试线是多少,2021南京大学
  16. 神经网络自我认知模型
  17. 大家好!我是happy_HuHu
  18. 时间与运动--位姿轨迹
  19. java超市收银系统图形界面,含BATJM大厂
  20. Unity2D_鼠标拖动物体移动

热门文章

  1. 基于DSP技术的多路语音实时采集与压缩处理系统
  2. 阿里产品专家杨文韬:你想了解的1688都在这里
  3. 产品经理读:李善友《产品型社群-互联网思维的本质》
  4. Jmeter性能测试-GC相关
  5. ServletContextListener接口用法
  6. manual start user profile import
  7. wordpress 首页调用文章 不同样式的方法
  8. 线上squid防火墙配置
  9. 从权限管理看互联网产品的盈利方式
  10. 区块链如何应用于保险行业