转:ABAP-- 你是不是还想从右边开始截取固定几位字符串?

今天有人问我,字符串怎么右截取?
为什么要右截取?
因为我也不知道我这个字段取出来的值是几个字符。如果是数字就还好,我直接让前导零满位,再从左边某位开始截取,可是如果是字母开头,前导零还是不能满位啊?
首先摆个图

 

比如 一组数据 0001234,00A123,000005643,我只想要1234,和A123,5643,不确定左边有几个0怎么办,如果使用右截取是从右向左开始

SHIFT ‘0001234’ BY 1 PLACES RIGHT 表示从右边第一位开始截取。得到000123.。。

其实我们可以这样想:

比如我要从右边截取4位。这个字段是mseg-WEMPF 是CAHR12。

先计算出这个字段的长度lv_len,

然后减去4,等于要从第几位开始截取lv_cut_begin。

然后按照左截取的方式去截取就好了

eg: +8(4)从第八位开始截取四位

  TYPES: BEGIN OF ty_wempf,

    wempf TYPE wempf,

  END OF ty_wempf.

  DATA:ls_wempf TYPE ty_wempf.

  DATA:ls_wempf2 TYPE ty_wempf.

  DATA:lt_wempf TYPE TABLE OF ty_wempf.

  DATA:lt_wempf2 TYPE TABLE OF ty_wempf.

  DATA lv_cut_begin TYPE i.

  DATA lv_len TYPE i.

  ls_wempf-wempf = '0510000000'.

  APPEND ls_wempf TO lt_wempf.

  ls_wempf-wempf = 'A0503'.

  APPEND ls_wempf TO lt_wempf.

  ls_wempf-wempf = 'eric0001'.

  APPEND ls_wempf TO lt_wempf.

  ls_wempf-wempf = 'CAM-CAOJ'.

  APPEND ls_wempf TO lt_wempf.

  ls_wempf-wempf = '000400000025'.

  APPEND ls_wempf TO lt_wempf.

 

  LOOP AT lt_wempf INTO ls_wempf.

    lv_len = strlen( ls_wempf-wempf ).

    lv_cut_begin = lv_len - 4.

    ls_wempf2-wempf = ls_wempf-wempf+lv_cut_begin(4).

    APPEND ls_wempf2 to lt_wempf2.

    clear:ls_wempf2,ls_wempf,lv_len,lv_cut_begin.

  ENDLOOP.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 ABAP 中,要从某个字符串开始截取,可以使用字符串函数 `SUBSTRING`。此函数可以从给定的起始位置开始截取指定长度的字符串,或者直接截取从给定位置到字符串末尾的所有字符。 语法如下: ``` SUBSTRING( <字符串>, <起始位置>, <截取长度> ) ``` 其中,`<字符串>` 代表需要截取的原始字符串,`<起始位置>` 代表从哪个位置开始截取(从1开始计数),`<截取长度>` 代表需要截取的字符个数(可选,如果不指定则默认截取从 `<起始位置>` 开始到字符串末尾的所有字符)。 例如,要从字符串 `"Hello World"` 的第 7 个字符(即字符 W)开始截取后面的所有字符,可以使用以下 ABAP 代码: ``` DATA: original_str TYPE string VALUE `Hello World`, start_pos TYPE i VALUE 7, sub_str TYPE string. SUBSTRING original_str STARTING AT start_pos INTO sub_str. ``` 执行完以上代码后,`sub_str` 的值就是 `"World"`。 注意,在 ABAP 中,STRING 类型的字符串变量可以直接使用字符串函数来处理,但是 CHAR 类型的字符串变量(如 `CHAR10`、`CHAR20`)需要先使用 `CONCATENATE` 函数将其换为 STRING 类型才能使用字符串函数。 ### 回答2: 在ABAP中,从某个字符串截取子串可以使用substring或substring_before方法。下面是每种方法的解释和示例: 1. substring方法: substring方法用于从源字符串截取从某个位置开始的一段子串。在这个方法中,你需要提供源字符串截取起始位置以及截取的长度。示例代码如下: DATA(my_str) = 'Hello World'. DATA(sub_str) = substring( my_str starting at 7 length 5 ). WRITE sub_str. "输出 "World" 在上面的代码中,我们首先定义了my_str字符串为“Hello World”,然后使用substring方法从第7个字符开始截取长度为5的子串,最后将其赋值给sub_str变量并输出“World”。 2. substring_before方法: substring_before方法用于从源字符串截取从某个字符开始到第一个指定字符之间的子串。在这个方法中,你需要提供源字符串截取的起始位置和指定字符。示例代码如下: DATA(my_str) = 'Hello World'. DATA(sub_str) = substring_before( my_str starting at 7 into ' ' ). WRITE sub_str. "输出 "World" 在上面的代码中,我们同样定义了my_str字符串,然后使用substring_before方法从第7个字符开始截取到第一个空格字符之间的子串,最后赋值给sub_str变量并输出“World”。 通过这两种方法,我们可以在ABAP中轻松地从一个字符串截取指定的子串,以便进行进一步的处理或分析。 ### 回答3: 在ABAP中从某个字符串开始截取可以使用字符串函数来实现。具体实现步骤如下: 1. 首先需要确定要截取字符串截取的起始位置。例如,有一个字符串“Hello World”,需要从第6个字符位置开始截取,即“World”部分。可以使用如下代码定义: data(original_string) = 'Hello World'. data(start_pos) = 6. 2. 接下来可以使用字符串函数SUBSTRING来截取指定位置的字符串。SUBSTRING函数可以接受三个参数:原字符串、起始位置和截取长度。例如,要从original_string变量的第6个字符位置开始截取,可以使用如下代码: data(substring) = substring(original_string from start_pos). 其中,from start_pos表示从字符串的第六个字符位置开始截取。 3. 最后,可以通过WRITE语句将截取到的字符串输出到控制台上: write substring. 以上就是在ABAP中从某个字符串开始截取的具体实现步骤。需要注意的是,我们可以通过修改起始位置和截取长度来截取任何位置的字符串。同时,还可以将SUBSTRING函数嵌套到其他字符串函数中使用,以实现更多复杂的字符串操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值