有没有办法用动态计算的长度声明 char 变量(或者可能是字符串)?此编码阐明了我想要的内容:
DATA: len TYPE i,
a TYPE i,
b TYPE i.
len = a + b.
DATA: var(len) TYPE с.
不要提出带有 CREATE DATA 和/或字段符号的解决方案:我已经尝试过了,但它们不适用于我的情况。此类声明的目的是添加前导零和/或将其他逻辑应用于此字符串。因此要严格声明字符串!
有什么建议吗?
有没有办法用动态计算的长度声明 char 变量(或者可能是字符串)?此编码阐明了我想要的内容:
DATA: len TYPE i,
a TYPE i,
b TYPE i.
len = a + b.
DATA: var(len) TYPE с.
不要提出带有 CREATE DATA 和/或字段符号的解决方案:我已经尝试过了,但它们不适用于我的情况。此类声明的目的是添加前导零和/或将其他逻辑应用于此字符串。因此要严格声明字符串!
有什么建议吗?
Dezmond,很久以前,但我想这是您问题的解决方案:
DATA:
lo_len TYPE REF TO data.
FIELD-SYMBOLS:
<lv_len> TYPE any.
lv_length = 10.
CREATE DATA lo_len TYPE c LENGTH lv_length.
ASSIGN lo_len->* TO <lv_len>.
干杯,冈特
据我所知,这样的动态数据声明是不可能的。我完成变量前导零的方法是在子类中覆盖我的“add_leading_zeroes”方法,将我的字符串移动到正确类型的变量,添加零并将其移回主类......
您还可以指定一个接受您的字符串和数据类型名称的方法...使用 RTTS 获取该类型的长度并使用它来添加零。
根据您施加的限制(除了“相信我”之外没有指定任何可以理解的原因),这是不可能的。甚至尝试这个也是完全没有意义的。您要么在编译时知道长度,要么不知道。如果您需要将长度视为变量,那么尝试动态生成数据类型是没有意义的。使用 STRING 并手动处理前导零。这并不难。
编辑 1: 至少在相当新的版本中,完全可以将 SHIFT、OVERLAY 和 TRANSLATE 与 STRING 变量一起使用。
编辑 2:如果您需要复杂的模式,请使用正则表达式 - 报告 DEMO_REGEX_TOY 和ABAP 文档应该为您提供足够的信息。