#string #abap
#строка #abap
Вопрос:
Когда вы вводите знак зодиака в параметре, например, «Лев» или «ЛЕВ», вывод должен отображаться как «Этот пользователь — ЛЕВ», но когда я это делаю, мне отображается только слово «НЕДОПУСТИМЫЙ».
Может ли кто-нибудь помочь мне, чтобы при попытке ввести определенное слово оно отображалось так, как указано в условиях?
Это мой код:
REPORT Z_006_EXER3.
PARAMETERS zodiac(10) TYPE C.
DATA today type d.
today = sy-datum.
WRITE:/ 'Your horoscope as of today', sy-datum.
if zodiac = 'Capricorn''CAPRICORN'.
write:/ 'The user is a capricorn'.
elseif zodiac = 'Aquarius''AQUARIUS'.
write:/ 'The user is an Aquarius'.
elseif zodiac = 'Pisces''PISCES'.
write:/ 'The user is a PISCES'.
elseif zodiac = 'Aries''ARIES'.
write:/ 'The user is an ARIES'.
elseif zodiac = 'Taurus''TAURUS'.
write:/ 'The user is a TAURUS'.
elseif zodiac = 'Gemini''GEMINI'.
write:/ 'The user is a GEMINI'.
elseif zodiac = 'Cancer''CANCER'.
write:/ 'The user is a CANCER'.
elseif zodiac = 'Leo''LEO'.
write:/ 'The user is a LEO'.
elseif zodiac = 'Virgo''VIRGO'.
write:/ 'The user is a VIRGO'.
elseif zodiac = 'Libra''LIBRA'.
write:/ 'The user is a LIBRA'.
elseif zodiac = 'Scorpio''SCORPIO'.
write:/ 'The user is a SCORPPIO'.
elseif zodiac = 'Sagittarius''SAGITTARIUS'.
write:/ 'The user is a SAGITTARIUS'.
else.
write:/ 'Invalid'.
endif.
Ответ №1:
С помощью этой строки кода:
elseif zodiac = 'Leo''LEO'.
вы проверяете zodiac
, равна ли переменная двум объединенным словам « Leo'LEO
» с одной одинарной кавычкой между ними. Вы не тестируете «Leo» или «LEO».
Вместо этого вы должны сделать, как сказал Грег:
elseif zodiac = 'Leo' OR zodiac = 'LEO'.
Если вы хотите знать все возможные синтаксисы, прочитайте официальную документацию ABAP о логических выражениях (NOT, OR, AND, EQUIV и т. Д.)
Я могу добавить несколько вещей о вашем конкретном алгоритме:
- Поскольку вы оцениваете ту же переменную в вашем IF…В противном случае, если цепочка, вы можете использовать регистр…ПРИ конструировании или операторе конструктора
SWITCH
. - Поскольку я предполагаю, что вы пытаетесь игнорировать регистр букв, вы можете упростить свой код, изменив ввод на верхний регистр с помощью либо
to_upper
или старогоTRANSLATE...TO UPPER CASE
, а затем сравнив его только со словом в верхнем регистре. - Ваша оценка также может быть сведена к более короткой форме с помощью любого из двух операторов конструктора
SWITCH
илиCOND
. - Если вы повторяете текст «Пользователь есть», вы можете определить его один раз в переменной и впоследствии объединить его, например, с помощью строкового шаблона (
|...{ ... }...|
) .
Пример окончательного кода с версией ABAP> = 7.40:
DATA(zodiac_input_evaluation) = SWITCH string( to_upper( zodiac )
LET intro = `The user is` IN
WHEN 'CAPRICORN' THEN |{ intro } a capricorn|
WHEN 'AQUARIUS' THEN |{ intro } an Aquarius|
WHEN 'PISCES' THEN |{ intro } a PISCES|
WHEN 'ARIES' THEN |{ intro } an ARIES|
WHEN 'TAURUS' THEN |{ intro } a TAURUS|
WHEN 'GEMINI' THEN |{ intro } a GEMINI|
WHEN 'CANCER' THEN |{ intro } a CANCER|
WHEN 'LEO' THEN |{ intro } a LEO|
WHEN 'VIRGO' THEN |{ intro } a VIRGO|
WHEN 'LIBRA' THEN |{ intro } a LIBRA|
WHEN 'SCORPIO' THEN |{ intro } a SCORPPIO|
WHEN 'SAGITTARIUS' THEN |{ intro } a SAGITTARIUS|
ELSE 'Invalid' ).
WRITE : / zodiac_input_evaluation.
Ответ №2:
Вместо: if zodiac = 'Capricorn''CAPRICORN'
У вас должно быть: if zodiac = 'Capricorn' or zodiac = 'CAPRICORN'