-1

有没有办法用动态计算的长度声明 char 变量(或者可能是字符串)?此编码阐明了我想要的内容:

DATA: len TYPE i,
      a   TYPE i,
      b   TYPE i.
len = a + b.
DATA: var(len) TYPE с.

不要提出带有 CREATE DATA 和/或字段符号的解决方案:我已经尝试过了,但它们不适用于我的情况。此类声明的目的是添加前导零和/或将其他逻辑应用于此字符串。因此要严格声明字符串!

有什么建议吗?

4

3 回答 3

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>.

干杯,冈特

于 2013-03-22T23:49:34.090 回答
0

据我所知,这样的动态数据声明是不可能的。我完成变量前导零的方法是在子类中覆盖我的“add_leading_zeroes”方法,将我的字符串移动到正确类型的变量,添加零并将其移回主类......

您还可以指定一个接受您的字符串和数据类型名称的方法...使用 RTTS 获取该类型的长度并使用它来添加零。

于 2012-08-21T12:18:42.627 回答
-1

根据您施加的限制(除了“相信我”之外没有指定任何可以理解的原因),这是不可能的。甚至尝试这个也是完全没有意义的。您要么在编译时知道长度,要么不知道。如果您需要将长度视为变量,那么尝试动态生成数据类型是没有意义的。使用 STRING 并手动处理前导零。这并不难。

编辑 1: 至少在相当新的版本中,完全可以将 SHIFT、OVERLAY 和 TRANSLATE 与 STRING 变量一起使用。

编辑 2:如果您需要复杂的模式,请使用正则表达式 - 报告 DEMO_REGEX_TOY 和ABAP 文档应该为您提供足够的信息。

于 2012-08-21T10:39:28.803 回答