温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Split string mixed input into range of single values
abap range sap string

其他 - 将字符串混合输入拆分为单个值的范围

发布于 2020-04-29 21:14:00

我有一个允许多个ID的输入。可以这样输入:

[  1000, 1001, 1050-1060, 1100  ]              

从此输入字符串中,我想获取所有单个ID。我已经发现每个之后都可以拆分,,因此具有1000、1001的部分已经可以使用。

data : itab TYPE TABLE OF string,
SPLIT l_bukrs_string AT ';' INTO TABLE itab.

我的问题是自建范围。知道如何将其与上面的情况结合起来以将1050-1060拆分为单个值吗?

我要1050 | 1051 | 1052 | ... | 1060

感谢所有提示:)非常感谢!

查看更多

提问者
RNH
被浏览
39
Legxis 2020-02-11 22:52

最简单的解决方案是改为对用户(?)输入使用实际范围/选择选项。然后,您将使用该范围从数据库表中选择每个值。

如果您不能使用实际范围/选择选项,则可以将字符串转换为一个,如下所示。

DATA: bukrs_string   TYPE string,
      split_bukrs    TYPE TABLE OF string,
      bukrs          TYPE bukrs,
      bukrs_between  TYPE TABLE OF bukrs,
      bukrs_range    TYPE RANGE OF bukrs,
      bukrs_rline    LIKE LINE OF bukrs_range,
      bukrs_table    TYPE TABLE OF bukrs.

FIELD-SYMBOLS: <string>     TYPE string,
               <bukrs>      TYPE bukrs,
               <bukrs_from> TYPE bukrs,
               <bukrs_to>   TYPE bukrs.

bukrs_string = '1000, 1001, 1050-1060, 1100'.
CONDENSE bukrs_string NO-GAPS.
SPLIT bukrs_string AT ',' INTO TABLE split_bukrs.

LOOP AT split_bukrs ASSIGNING <string>.

  bukrs_rline-sign = 'I'.

  IF <string> CA '-'.

    SPLIT <string> AT '-' INTO TABLE bukrs_between.
    bukrs_rline-option = 'BT'.
    READ TABLE bukrs_between INDEX 1 ASSIGNING <bukrs_from>.
    bukrs_rline-low = <bukrs_from>.
    READ TABLE bukrs_between INDEX 2 ASSIGNING <bukrs_to>.
    bukrs_rline-high = <bukrs_to>.

  ELSE.

    bukrs_rline-option = 'EQ'.
    bukrs = <string>.
    bukrs_rline-low = bukrs.

  ENDIF.

  APPEND bukrs_rline TO bukrs_range.
  CLEAR bukrs_rline.

ENDLOOP.

SELECT bukrs
  FROM t001
  INTO TABLE bukrs_table
 WHERE bukrs IN bukrs_range.

在分割字符串之前,请先将其压缩以删除所有空格。然后,您将遍历结果部分,并检查其是否包含任何“-”。如果是这种情况,请再次拆分它并在您的范围内创建一个BETWEEN条目(考虑是否可能需要进行其他检查,以查看后者的数字是否实际上更高)。如果没有“-”,则只需创建一个EQUAL条目。

拥有实际范围后,就可以使用它来从数据库中进行选择。这是因为并非该范围内的每个骗子都必须存在。例如,您可能只有1000、1050、1055和1060。

编辑:之所以没有命令,功能模块或类来将范围转换为单个值,是因为需要执行的操作根据范围所针对的数据以及是否/需要验证多少值而发生重大变化。如果您有整数范围,那么您要做的就是取起始值并将其加1直到达到目标值。一系列二进制浮点数呢?各种颜色呢?那么您的公司代码范围又如何呢?这就是为什么必须手动完成转换的原因。