ABAP-用Shift去掉字符串的前导'0'


SHIFT str LEFT DELETING LEADING '0'.
如果要在layout显示不出前面的0 格式: &字段(zc)&
如果要在layout显示不出小数点后面的0 格式:   &字段(.0)&
关于shift
1.Shift a structure by a given number of postions
SHIFT <c> [BY <n> PLACES] [<mode>].
This statement shifts the field <c> by <n> positions. If you omit BY <n> PLACES, <n> is
interpreted as one. If <n> is 0 or negative, <c> remains unchanged. If <n> exceeds the length
<c>, <c> is padded with blanks. <n> can be variable.
With the different (<mode>) options, you can shift the field <c> in the following ways:
· LEFT:
Shift <n> positions to the left and pad with <n> blanks on the right (default setting).
· RIGHT:
Shift <n> positions to the right and pad with <n> spaces on the left.
· CIRCULAR:
Shift <n> positions to the left so that <n> characters on the left appear on the right.
2.Shift a structure up to a given string
To shift field contents up to a given string, use the SHIFT statement as follows
Syntax
SHIFT <c> UP TO <str> <mode>.
ABAP searches the field contents of <c> until it finds the string <str> and shifts the field <c> up to
the field margin. The (<mode>) options are the same as described in the section Shifting a
Structure by a Given Number of Positions [Page 201]. <str> can be a variable.
If <str> is not found in <c>, SY-SUBRC is set to 4 and <c> is not shifted. Otherwise, SY-SUBRC is set to 0.
3.Shifting a structure according to the first or last character
You can use the SHIFT statement to shift a field to the left or to the right, provided the first or last
character satisfies a certain condition. To do this, use the following 
syntax:
SHIFT <c> LEFT DELETING LEADING <str>.
SHIFT <c> RIGHT DELETING TRAILING <str>.






ABAP用移位去掉字符串的前导'0'(转)
SHIFT STR左删除领先'0'。
如果要在布局显示不出前面的0格式:&字段(ZC)
如果要在布局显示不出小数点后面的0格式:&字段(0.0)
关于转变
由给定数目的志愿服务岗位1.Shift的结构
SHIFT<C>[BY<N>旅游][<MODE>]。
这条语句转移的字段<c>由<N>位置。如果省略按<N>的地方,<n>是
解释为一体。如果<n>是0或负数,<C>保持不变。如果<N>的长度超过
<C>,<C>用空格填充。可以是可变<N>。
不同(<MODE>)选项,你可以转移字段<c>以下方式:
·左:
移位<N>位置的左侧和右侧(默认设置<N>空白垫)。
·正确的:
移位<N>位置的权利和垫与在左边的<N>空间。
·通告:
移位<N>位置左侧,以使在左边的<N>字符会出现在右边。
2.Shift到一个给定的字符串的结构
字段内容转移到一个给定的字符串,如下表使用SHIFT
句法
SHIFT的<c> UP TO<str><MODE>。
ABAP搜索领域的内容,直到它找到的<c>字符串<str>和移动字段<c>
农田边界。一节中所描述的一样移一个选项(<MODE>)
按给定的位置数[201]的结构。 <str>可以是一个变量。
如果被发现,但在<C><str>,则将SY-SUBRC设置为4不移位的<c>。否则,则将SY-SUBRC设置为0。
3.Shifting根据第一个或最后一个字符的结构
您可以使用SHIFT语句的左侧或右侧,提供了第一个或最后一个领域转移
字符满足目标条件。要做到这一点,请使用以下
语法:
SHIFT<C>左删除领先<str>的。
SHIFT的<c> RIGHT删除尾随<str>,。

<think>好的,我现在需要在ABAP中实现删除字符串前五位的功能。首先,我需要回忆一下ABAP中处理字符串的相关语句和函数。根据之前学过的知识,ABAP提供了多种字符串操作的方法,比如使用SHIFT语句或者子字符串函数。 我记得引用[4]里提到过SHIFT命令,它可以移动字符串的内容。SHIFT语句有不同的模式,比如LEFT DELETING LEADING或者直接按位数移动。比如,如果我想删除前五位,可能需要将字符串左移五位,这样前面的字符就被移除了。例如,SHIFT lv_str LEFT BY 5 PLACES. 这样的操作应该可以去掉前五个字符,剩下的部分就会左对齐,后面可能补空格?不过具体效果需要验证。 另外,可能还可以使用子字符串函数,比如lv_str+5。在ABAP中,字符串变量后面加偏移量可以直接获取子字符串。比如,如果原字符串是'ABCDEFG',那么lv_str+5会得到从第六位开始的字符,即'FG',假设前五位是'ABCDE'。但要注意字符串的长度是否足够,如果字符串长度不足五位,这样可能会出错,所以需要先检查长度。 不过用户的需求是直接删除前五位,不管长度如何。如果字符串长度不足五位,可能需要处理成空字符串或者原样保留?比如,当字符串只有3位时,删除前五位后应该变成空。这时候用子字符串的方式可能更直接,因为即使偏移量超过长度,ABAP会返回空字符串,而不会报错。这样可能更安全。 现在需要写出示例代码。两种方法都可以试试: 第一种方法是使用SHIFT语句: DATA(lv_str) = '1234567890'. SHIFT lv_str LEFT BY 5 PLACES. 这样lv_str会变成'67890',对吗?假设原字符串足够长的话。但需要测试一下。如果原字符串长度不足五位,比如'123',SHIFT左移五位的话,结果会是空吗? 另一种方法是使用子字符串: DATA(lv_str) = '1234567890'. lv_str = lv_str+5. 这里,如果原字符串长度超过五,比如例子中的情况,结果就是第六位开始的字符,即'67890'。如果原字符串长度刚好是五,那么结果为空。如果不足五位,比如四位的字符串,那么lv_str+5会返回空字符串。这可能符合用户的需求。 所以两种方法都可以,但子字符串可能更简洁,不需要处理可能的空格问题。比如SHIFT可能在某些情况下保留空格?或者SHIFT移动后后面的内容填充空格?需要确认ABAP字符串处理机制。例如,假设原字符串是固定长度,比如CHAR类型,那么SHIFT可能会移动后保留后面的空格。但如果是STRING类型,动态长度,那么SHIFT应该会调整长度。所以如果用户用的是STRING类型,使用SHIFT LEFT BY 5 PLACES应该正确截断前五位,而子字符串的方式也适用。 所以示例代码可以给出两种方法: 方法一:使用SHIFT DATA(lv_str) = 'HelloWorld'. SHIFT lv_str LEFT BY 5 PLACES. " 结果lv_str = 'World' 方法二:使用子字符串 DATA(lv_str) = 'HelloWorld'. lv_str = lv_str+5. " 结果lv_str = 'World' 这两种方法都能实现删除前五位的效果。但需要注意,如果字符串长度不足五位,子字符串的方式会返回空,而SHIFT可能也会移出所有字符,结果也是空。 另外,引用[3]提到了字符串替换和截取,但可能和这里的需求无关。引用[2]提到的循环移位可能不适用。引用[1]的去除重复字符的方法也不相关,但用户的问题是关于删除前五位。 因此,最终的示例代码应该展示这两种方法,并说明它们的效果。同时提醒用户注意字符串长度是否足够。</think>在ABAP中删除字符串前五位可以通过以下两种方法实现: ### 方法1: 使用`SHIFT`语句 ```abap DATA(lv_str) = '12345Hello'. SHIFT lv_str LEFT BY 5 PLACES. " 删除前5位 " 结果: lv_str = 'Hello' ``` - **原理**:`SHIFT LEFT BY n` 将字符串左移`n`位,超出部分直接截断[^4]。 - **注意**:若字符串长度不足5位,结果为空。 --- ### 方法2: 使用子字符串偏移 ```abap DATA(lv_str) = '12345World'. lv_str = lv_str+5. " 从第6位开始截取 " 结果: lv_str = 'World' ``` - **原理**:`lv_str+n` 表示从第`n+1`位开始截取到末尾。若字符串长度不足,返回空字符串- **优势**:语法简洁,无需显式调用函数。 --- ### 完整示例代码 ```abap REPORT z_remove_first_five. DATA: lv_str1 TYPE string VALUE 'ABCDEExample', lv_str2 TYPE string VALUE 'Short'. " 方法1: SHIFT SHIFT lv_str1 LEFT BY 5 PLACES. WRITE: / '方法1结果:', lv_str1. " 输出: Example " 方法2: 子字符串 lv_str2 = lv_str2+5. WRITE: / '方法2结果:', lv_str2. " 输出: 空(原字符串仅5位) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值