Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Арифметические выражения и математические функции

В ABAP/4 включен достаточный для разработки коммерческих приложений набор математических функций. Например, sin, cos и др.

DATA: A TYPE P, B LIKE A, X LIKE A, Y LIKE A,

INCOME TYPE I, TAX TYPE P, NET_INCOME TYPE P,

ALPHA TYPE P.

Y = A * X + B.

NET_INCOME = INCOME * ( 1 - TAX ).

Y = X * COS( ALPHA ).

B = EXP( A * LOG( Y ) ).

Арифметические выражения можно объединять в скобки. Заметим, что круглые скобки для группировки подвыражений разделяются, как минимум, одним пробелом.

DATA: N1 TYPE P, N2 TYPE P, N3 TYPE P, N4 TYPE P, N5 TYPE P.

N5 = ( N1 - N2 / N3 ) * ( N4 + N1 ) / N5.

Приоритет выполнения арифметических выражений в ABAP/4 аналогичен тому, что используется в большинстве современных языков программирования.

Операции со строками текста Конкатенация и разделение строк

Символьные строки объединяются (конкатенируются) с помощью команды CONCATENATE.

DATA: FIRST_NAME(25), MIDDLE_NAME(2), LAST_NAME(25),

FULL_NAME(54).

FIRST_NAME = 'Stas'.

MIDDLE_NAME = 'G'.

LAST_NAME = 'Makarov'.

CONCATENATE FIRST_NAME MIDDLE_NAME LAST_NAME INTO FULL_NAME.

WRITE / FULL_NAME.

После выполнения этой операции в поле FULL_NAME будет содержаться строка 'StasGMakarov'.

Если строки должны иметь разделители, то это задается следующим образом:

DATA: DIRECTORY_1(2), DIRECTORY_2(10), FILE_NAME(10),

PATH(24).

DIRECTORY_1 = 'a:'.

DIRECTORY_2 = 'usr'.

FILE_NAME = 'programs'.

CONCATENATE DIRECTORY_1 DIRECTORY_2 FILE_NAME

INTO PATH

SEPARATED BY '\'.

WRITE / PATH.

После выполнения этой операции в поле PATH будет содержаться строка 'a:\usr\programs'.

В связи со встроенным механизмом удаления пробелов в начале и конце строки в ABAP, для того, что бы объединить строки через пробел, нужно использовать константу SPACE.

DATA: FIRST_NAME(25), MIDDLE_NAME(2), LAST_NAME(25),

FULL_NAME(54).

FIRST_NAME = 'Stas'.

MIDDLE_NAME = 'G'.

LAST_NAME = 'Makarov'.

CONCATENATE FIRST_NAME MIDDLE_NAME LAST_NAME INTO FULL_NAME

SEPARATED BY SPACE.

WRITE / FULL_NAME.

После выполнения этой операции в поле FULL_NAME будет содержаться строка 'Stas G Makarov'.

Обратная операция разделения символьной строки осуществляется для произвольного разделителя:

DATA: LIST(40),

NAME_1(25), NAME_2(25), NAME_3(25).

LIST = 'Stas,Makarov,IBS'.

SPLIT LIST AT ',' INTO NAME_1 NAME_2 NAME_3.

WRITE: / NAME_1, NAME_2, NAME_3.

В итоге значения полей будет следующим: NAME_1 = 'Stas'; NAME_2 = 'Makarov'; NAME_3 = 'IBS'.

Если заранее не известно, на сколько частей разобьется та или иная строка, лучше копировать во внутреннюю таблицу, которая может содержать произвольное число строк.

DATA: NAMES LIKE NAME_1 OCCURS 10 WITH HEADER LINE.

LIST = ' Stas,Makarov,Moscow,IBS '.

SPLIT LIST AT ',' INTO TABLE NAMES.

LOOP AT NAMES.

WRITE / NAMES.

ENDLOOP.

Замена и преобразование символов в строке

Для замены строки используется команда REPLACE.

DATA: STRING(80),

EXPRESSION(30).

STRING = 'Variable: &. The variable & is substituted later.'.

REPLACE '&' WITH 'X' INTO STRING.

WRITE / STRING.

В результате получим строку 'Variable: X. The variable & is substituted later.'. Для замены всех символов & на X вводится команда TRANSLATE.

...

TRANSLATE STRING USING '&X'.

WRITE / STRING.