Выравнивание числовых значений слева с помощью WRITE - PullRequest
2 голосов
/ 21 октября 2019

Я создаю таблицу расчетов и хочу выровнять числа слева под знаком «+».

Но почему-то перед первым числом в каждом столбце счетчика есть место перед ним.

Как я могу устранить это пространство и выровнять таблицу так, чтобы левая сторона была в одном ряду?

enter image description here

Код:

DATA: counter  TYPE i,
      counter2 TYPE i.

ULINE /(159).
WRITE: /1 sy-vline , '+', sy-vline.

DO 11 TIMES.
  counter = sy-index - 1 .
  WRITE:  counter, sy-vline.
ENDDO.

ULINE /(159).

DO 11 TIMES.
  counter = sy-index - 1 .
  WRITE: /1 sy-vline , counter ,  sy-vline.
  ULINE /(159).
ENDDO.

1 Ответ

3 голосов
/ 21 октября 2019

Пробелы перед числом есть из-за типа данных. Тип i является элементарным типом данных и может иметь числа от -2147483648 до 2147483647, что означает, что он может быть длиной 11 символов. Некоторые типы данных имеют выходную длину, которая является переменной, но это не относится к i. Вы можете видеть, что если вы щелкнете по нему в выводе, он должен иметь красный контур длиной 11 символов.

Но если вы предпочитаете использовать пробелы в конце числа, вы можете использовать 'CONVERSION_EXIT_ALPHA_OUTPUT'. Но «контур таблицы» все равно должен быть таким же большим, поскольку число может иметь 11 символов.

DATA: counterc TYPE c LENGTH 11.

...

MOVE counter TO counterc.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
  EXPORTING
    input  = counterc
  IMPORTING
    output = counterc.

...

WRITE: ... counterc ...

В качестве альтернативы, вывод таблицы выглядит намного лучше, если вы используете SALV. Посмотрите, например, здесь , чтобы увидеть, как вывести таблицу с помощью SALV.

...