ABAP根据显示长度转换为字符长度截取字符串

本文介绍了一个ABAP函数ZF_BASED_DISPLAY_LENGTH,用于获取并裁剪字符串以适应特定的显示长度。当字符串的显示长度超过指定长度时,该函数会逐字符计算并返回最接近指定长度的有效字符串部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FUNCTION ZF_BASED_DISPLAY_LENGTH.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_LENG) TYPE  I
*"     VALUE(I_CHAR) TYPE  CHAR200
*"  EXPORTING
*"     VALUE(E_LENG) TYPE  I
*"     VALUE(E_CHAR) TYPE  CHAR200
*"----------------------------------------------------------------------

  DATA GS_LENG TYPE I.
  DATA SUM_LENG  TYPE I.
  DATA SUM_LENGD TYPE I.
  DATA SUM_CHAR TYPE CHAR200.
*获取字符串的显示长度
  GS_LENG = CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( I_CHAR ).

  IF GS_LENG > I_LENG.
    SUM_LENG = 0.
    SUM_LENGD = 0.
    WHILE SUM_LENGD < I_LENG.
      CLEAR SUM_CHAR.
      ADD 1 TO SUM_LENG .
      SUM_CHAR = I_CHAR(SUM_LENG).
      SUM_LENGD = CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( SUM_CHAR ).
    ENDWHILE.

    IF I_LENG < CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( SUM_CHAR ).
      SUM_LENG = SUM_LENG - 1 .
      SUM_CHAR = I_CHAR(SUM_LENG).
    ENDIF.

    E_LENG = SUM_LENG.
    E_CHAR = SUM_CHAR.
  ELSE.
    E_LENG = STRLEN( I_CHAR ).
    E_CHAR = I_CHAR.
  ENDIF.

ENDFUNCTION.

效果:

 

### 回答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、付费专栏及课程。

余额充值