IF条件评估错误以进行字符串比较

问题描述

当您在参数中键入星座时,示例为“ Leo”或“ LEO”,输出显示为“此用户是LEO”,但当我这样做时,只会显示单词“ INVALID”。

有人可以帮助我,这样当我尝试键入特定单词时,它将出现在条件说明中吗?

这是我的代码

dnspython

解决方法

使用以下代码行:

elseif zodiac = 'Leo''LEO'.

您正在测试变量zodiac是否等于两个串联词“ Leo'LEO”,并且两个引号之间只有一个引号。您没有测试“狮子座”或“狮子座”。

相反,您应该按照格雷格所说:

elseif zodiac = 'Leo' OR zodiac = 'LEO'.

如果您想了解所有可能的语法,请阅读官方的ABAP documentation about Logical Expressions(NOT,OR,AND,EQUIV等)

我可以添加一些有关您的特定算法的信息:

  • 在评估IF ... ELSEIF链中的同一变量时,可以使用CASE...WHEN construct或构造函数运算符SWITCH
  • 我猜您正在尝试忽略字母大小写,可以通过使用to_upper或旧的TRANSLATE...TO UPPER CASE将输入更改为大写,然后将其与仅进行比较来简化代码大写单词。
  • 通过使用两个构造函数SWITCHCOND中的任何一个,您的评估也可以简化为较短的形式。
  • 如果重复文本“用户是”,则可以在变量中定义一次,然后再将其连接起来,例如使用String Template|...{ ... }...|)。

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.
,

相反: if zodiac = 'Capricorn''CAPRICORN' 你应该有: if zodiac = 'Capricorn' or zodiac = 'CAPRICORN'