有没有办法用动态计算的长度声明char变量(或者字符串)?这个编码澄清了我想要的东西:
DATA: len TYPE i,
a TYPE i,
b TYPE i.
len = a + b.
DATA: var(len) TYPE с.
不建议使用CREATE DATA和/或字段符号的解决方案:我已尝试过它们,但它们不适用于我的情况。 此声明的目的是添加前导零和/或将其他逻辑应用于此字符串。因此,字符串将被声明为严格!
任何提案?
答案 0 :(得分:2)
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>.
干杯, 甘
答案 1 :(得分:0)
据我所知,这样的动态数据声明是不可能的。我完成变量前导零的方法是在子类中覆盖我的“add_leading_zeroes”方法,将我的字符串移动到正确类型的变量,添加零并将其移回主类......
您还可以指定一个接受字符串和数据类型名称的方法...使用RTTS获取该类型的长度并使用它来添加零。
答案 2 :(得分:-1)
根据你施加的限制(除了“信任我”之外没有指明任何可以理解的理由),这是不可能的。 即使尝试这一点也毫无意义。要么你知道编译时的长度,要么你不知道。如果您需要将长度视为变量,那么尝试动态生成数据类型是没有意义的。使用STRING并手动处理前导零。这并不难。
编辑1: 完全可以使用SHIFT,OVERLAY和TRANSLATE与STRING变量,至少在合理的最新版本中。
编辑2: 如果您需要复杂的模式,请使用正则表达式 - 报告DEMO_REGEX_TOY,ABAP documentation应该为您提供足够的信息。