具有动态长度的字符变量

时间:2012-08-21 10:18:04

标签: string char sap declaration abap

有没有办法用动态计算的长度声明char变量(或者字符串)?这个编码澄清了我想要的东西:

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

不建议使用CREATE DATA和/或字段符号的解决方案:我已尝试过它们,但它们不适用于我的情况。 此声明的目的是添加前导零和/或将其他逻辑应用于此字符串。因此,字符串将被声明为严格

任何提案?

3 个答案:

答案 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应该为您提供足够的信息。