string - 将字符串混合输入拆分为单个值的范围
问题描述
我有一个允许多个 ID 的输入。它们可以像这样输入:
[ 1000, 1001, 1050-1060, 1100 ]
我想从这个输入字符串中获取所有单个 ID。我已经发现这个在 each 之后拆分,
,所以 1000, 1001 的部分已经可以工作了。
data : itab TYPE TABLE OF string,
SPLIT l_bukrs_string AT ';' INTO TABLE itab.
我的问题是自建范围。知道如何将其与上述情况结合起来将 1050-1060 拆分为单个值吗?
我要1050 | 1051 | 1052 | ... | 1060出它。
欣赏每一个提示:) 非常感谢!
解决方案
最简单的解决方案是对用户(?)输入使用真正的范围/选择选项。然后,您将使用该范围从数据库表中选择每个值。
如果您不能使用真正的范围/选择选项,那么您可以将字符串转换为一个,如下所示。
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 条目。
获得真实范围后,您可以使用它从数据库中进行选择。这是因为并非该范围内的每个 bukrs 都必须存在。例如,您可能只有 1000、1050、1055 和 1060。
编辑:没有命令、功能模块或类将范围转换为单个值的原因是因为需要做的事情会根据范围的数据以及是否/需要验证多少值而发生很大变化。如果您有一个整数范围,那么您需要做的就是获取起始值并将其加 1 直到达到起始值。一系列二进制浮点数呢?一系列颜色呢?您的公司代码范围如何,并非所有代码都必须存在?这就是必须手动完成转换的原因。
推荐阅读
- vba - VBA 功能区栏集成
- javascript - 带有 Selenium 的 Powershell:错误:元素不可交互
- python - Python authlib flask - 如何明确地进行授权重定向?
- javascript - 为什么应用程序脚本中的日期不等价
- python - 将 .dat 文件加载到一个列表中并计算其中的实体
- javascript - 如何创建选项有限的颜色选择器(调色板)?
- scipy - 如何将 scipy.signal.correlate 输出标准化为 -1 到 1
- android - Why is my custom intent mixing parameters?
- django - Django Environment Variables coming from docker-compose.yml but don't effect the project
- python - TensorFlow 2:如何使用散射功能?