有没有办法用动态计算的长度来声明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>.
干杯,Gunter
据我所知,这样的动态数据声明是不可能的。我做变量前导零的方法是覆盖子类中的"add_leading_zeros"方法,将字符串移动到正确类型的变量,添加零并将其移回主类。。。
您还可以指定一个方法来接受您的字符串和数据类型的名称。。。使用RTTS获取该类型的长度,并使用它添加零。
在您施加的限制下(除了"相信我"之外,没有指定任何可以理解的原因),这是不可能的。尝试这个也是完全没有意义的。要么在编译时知道长度,要么不知道。如果您需要将长度视为一个变量,那么尝试动态生成数据类型是没有意义的。使用字符串并手动处理前导零。没那么难。
编辑1:将SHIFT、OVERLAY和TRANSLATE与STRING变量一起使用是完全可能的,至少在最近的版本中是这样。
编辑2:如果您需要复杂的模式,请使用正则表达式-报告DEMO_REGEX_TOY,ABAP文档应该为您提供足够的信息。