- 浏览: 783019 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
ABAP常用字符串操作
字符串首字符索引为 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开始
单词是指: 用 空格 , ; : ? ! () / + =分隔的字串
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中的偏移量信息
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'
注意:+兩邊不能有空格。
字符串首字符索引为 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开始
单词是指: 用 空格 , ; : ? ! () / + =分隔的字串
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中的偏移量信息
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'
注意:+兩邊不能有空格。
发表评论
-
SAP ABAP 点滴记录
2010-04-30 14:56 2318SAP ABAP 点滴记录 Post By:2009-6- ... -
SAP数据库表
2010-04-30 14:51 1593SAP数据库表 SAP词典包含了4种类型的表(或结构): ... -
ABAP常用fuction
2010-04-30 14:49 1204ABAP常用fuction Post By:2009-7- ... -
sap 增强
2010-04-30 14:37 1651sap的用户出口总共有三代: 1、第一代 sap提供 ... -
ABAP简介
2010-04-30 10:31 1268一:什么是ABAP。 定义 ... -
ABAP中去掉前导零问题
2010-04-30 10:03 1831ABAP中去掉前导零问题 1.可以调用CONVERSION_ ... -
常用的字符串处理函数
2010-04-30 09:36 15151. 在字符串前補0. (如果p_input的位數未滿,則會於 ... -
ABAP日期格式轉換
2010-04-30 09:32 2383ABAP日期格式轉換 =================== ... -
常用的字符串操作
2010-04-30 09:23 1050CONCATENATE 连接字符串 [SEPARATED BY ... -
设置SAP GUI Status的按钮为灰色
2010-04-29 14:16 2187设置SAP GUI Status的按钮为灰色 一,首先设置 ... -
ABAP 筑基宝典
2010-04-29 12:50 1560ABAP 筑基宝典(5) -- 关于使用READ TABLE语 ... -
内部表行数de三种统计方法
2010-04-29 09:48 936内部表行数统计方法: 1.LOOP AT itab. ... -
ABAP开发语言
2010-04-29 09:38 22392.第二部分 ABAP开发语言 ... -
ABAP学习笔记--处理字符串
2010-04-27 17:01 1989一、移动字段内容 1、按给定位置数移动字符串 语法:SH ... -
ABAP总结之二,BDC完整版
2010-04-22 15:29 2094BDC(batch data communication)是S ... -
3.1 FIELD-SYMBOLS
2010-04-13 19:32 1375FIELD-SYMBOLS是字段符号,类似于FOXPRO的宏, ...
相关推荐
ABAP 中的字符串操作是开发者日常工作中不可或缺的一部分,本文将对 ABAP 中常用的字符串操作进行收集和整理,包括字符串连接、字符串分隔、字符串查找、字符串替换、去前导 0 等操作。 1. 字符串连接 CONCATENATE...
掌握这些函数可以帮助开发者更高效地处理ABAP中的字符串操作。 总之,ABAP SQL Functions提供了一套丰富的工具来处理字符串,无论是连接、查找、截取还是格式化,都能让开发工作变得更加便捷。通过熟练运用这些函数...
ABAP 中提供了多种字符串函数,用于操作和处理字符串。常用的字符串函数有: 1. SHIFT STRING:左移字符串,长度减 1 2. SPLIT:拆分字符串 3. SEARCH:查询字符串 4. REPLACE:替换字符串 5. CONDENSE:删除多余的...
在ABAP中,掌握一些常用的函数是提高开发效率的关键。以下是一些常见的ABAP函数及其用途: 1. **系统变量**: - `SY-PAGNO`: 当前页号,用于跟踪报表或列表的页面。 - `SY-DATUM`: 返回当前系统日期,常用于记录...
11. **CONVERSION_EXIT_ALPHA_INPUT**和**CONVERSION_EXIT_ALPHA_OUTPUT**: 这两个函数分别用于在数字字符串前补零和去除前导零,常用于格式化显示。 12. **GET_JOB_RUNTIME_INFO**: 获取后台作业的运行时间信息,...
在ABAP编程中,熟练掌握常用的系统变量和函数对于编写高效、准确的代码至关重要。以下是一些关键知识点的详细说明: 1. **系统变量**: - `SY-PAGNO`:当前页面号,用于在报表或屏幕处理中跟踪用户的位置。 - `SY...
在ABAP中,掌握常用的系统变量和函数对于编写高效且易维护的代码至关重要。以下是一些核心知识点的详细说明: 1. **系统变量**: - `SY-PAGNO`:表示当前页号,常用于列表处理。 - `SY-DATUM`:提供当前系统日期...
### ABAP常用函数详解 #### 1. RS_VARIANT_VALUES_TECH_DATA 此函数主要用于返回一个内部表,其中包含了PARAMETER SELECT-OPTIONS的名字及其对应的值。这些信息在处理后台作业(Background Jobs)时尤其有用,因为...
在ABAP中处理字符串是常用的操作之一,如字符串的拼接、截取、查找等。这些操作往往涉及到字符串表达式和内建函数。字符串表达式可以是常量、变量或字段名等。字符串处理函数包括但不限于GET_LENGTH获取字符串长度、...
ABAP编程常用函数 ABAP是SAP公司开发的一种高级编程语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了大量的内置函数,能够帮助开发者快速实现各种业务逻辑。下面是ABAP编程中常用的函数: 1. SD_VBAP_READ_...
#### 二、字符串操作函数 1. **SHIFT STRING**:实现字符串的左移操作,即将字符串向左移动一位,其长度减少一个字符。 2. **CONCATENATE**:合并多个字符串为一个新字符串。 3. **SPLIT**:将一个字符串按照指定...
11. **CONVERSION_EXIT_ALPHA_INPUT** 和 **CONVERSION_EXIT_ALPHA_OUTPUT**: 用于在输入和输出时处理数字字符串,前者在数字前添加零,后者移除数字前的零。 12. **GET_JOB_RUNTIME_INFO**: 获取后台作业的相关...
此外,还会涉及字符串操作、日期时间处理等常用功能,这些都是编写ABAP程序的基础。 ALV控件的使用部分,会讲解如何利用SAP List Viewer(ALV)生成动态表格,展示和编辑数据。ALV是ABAP开发中非常实用的一个工具,...
#### 九、字符串操作 - **输出变量并控制格式**: ```abap WRITE:/10 g. // 在 10 个空格后输出变量 g。 / (8) time USING EDIT-MASK '__:__:__'. // 输出变量 time,并保持 8 位长度。 ``` - **强制结束循环**...
在《第三章 ABAP语法示例.pdf》中,作者通过一系列具体的例子介绍了ABAP语言的一些核心概念和技术应用,包括字段符号(field-symbols)的使用、字符串处理以及内表操作等。这些知识点对于初学者理解和掌握ABAP编程语言...
此外,描述中提到的“标准函数”可能包括数据类型转换、字符串操作、日期和时间处理、数学计算等常用功能。例如,`CONCATENATE`用于连接字符串,`DATE_TO_CHAR`和`CHAR_TO_DATE`用于日期格式的转换,`FLOAT_TO_...
5. **字符串处理函数**:提供字符串截取等功能,便于数据操作。 6. **子程序或自定义函数调用**:实现代码复用和模块化。 7. **SQL语法**:集成数据库查询和操作,增强数据访问能力。 8. **数据结构应用**:如内部表...
21. **字符串操作**:`SHIFT`左移字符串,`CONCATENATE`连接字符串,`SPLIT`按分隔符拆分字符串,`OVERLAY`覆盖字符串。 22. **长度计算**:`STRLEN`计算字符串长度,`COMPUTE`可计算表达式。 23. **去除多余空格*...