-1

動的に計算される長さで char 変数 (またはおそらく文字列) を宣言する方法はありますか? このコーディングは、私が望むものを明確にします:

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

CREATE DATA やフィールド シンボルを使用したソリューションを提案しないでください。試してみましたが、私の場合は適用できません。このような宣言の意図は、先行ゼロを追加したり、この文字列に他のロジックを適用したりすることです。したがって、string は厳密に宣言する必要があります。

何か提案はありますか?

4

3 に答える 3

2

デズモンド、かなり前ですが、これがあなたの質問に対する解決策だと思います:

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: 少なくともかなり最近のリリースでは、STRING 変数で SHIFT、OVERLAY、および TRANSLATE を使用することは完全に可能です。

編集 2: 複雑なパターンが必要な場合は、正規表現を使用してください - DEMO_REGEX_TOY を報告すると、ABAP ドキュメントで十分な情報が得られます。

于 2012-08-21T10:39:28.803 に答える