【问题标题】:Progress if statement进展 if 语句
【发布时间】:2014-06-19 19:02:01
【问题描述】:

我是一个进步的菜鸟,实际上基本块有问题。

下面的问题在我的 if else 语句中。当它只是 if, then, else then 时它工作得很好,但是当我想在 if 部分中放入多个语句时,我必须将它放在一个块中,所以我使用 if, then do: else,然后做:但这些对我不起作用。您可以看到任何明显的错误吗?我的错误消息是 **冒号后跟空格终止语句。 (199)

INPUT FROM "r:\_content\stephen\4gl apps\dpl\output.csv".
REPEAT:
  ASSIGN i_cntr = (i_cntr + 1).
  myRow = "".
  IMPORT DELIMITER ',' myRow.

  IF myRow[5] <> "" THEN DO:
      /*change this to assign 2 rows - 2 creates - 2 sets of four*/
      c_fname = myRow[1].

      MESSAGE 
      c_fname SKIP
      myRow[2] SKIP
      myRow[3] skip
      myRow[4] skip
      myRow[5] SKIP
      i_cntr
      VIEW-AS ALERT-BOX INFO BUTTONS OK.
   END./*end of if, then do:*/
   ELSE IF myRow[5] = "" THEN DO:
   MESSAGE 
   myRow[1] SKIP
   myRow[2] skip
   myRow[3] skip
   myRow[4] skip
   i_cntr
   VIEW-AS ALERT-BOX INFO BUTTONS OK.
END./*end of else if, then do:*/   
END./*end of repeat*/

【问题讨论】:

  • 提出问题是我们学习的方式:) 最好进行语法检查,它应该已经为您突出显示存在问题 - 会说类似无法理解之后 - ”结束”
  • 您也不需要 ELSE 和 DO 之间的 (IF myRow[5] = "" THEN):因为只有 2 个选项 和 = :-)

标签: progress-4gl openedge


【解决方案1】:

一个非常简单的语法错误:END 语句后至少需要一个空格。

END. /*end of if, then do:*/
/*  ^ Make sure there's space above here! */

如果您不想遵循 Tims 回答中的出色建议(使用 CASE)。这是 IF 语句的“完整”语法。

IF expression1 THEN DO:
  /* Code goes here */
END.
ELSE IF expression2 THEN DO:
  /* Code goes here */
END.
ELSE DO:
  /* Code goes here */
END.

表达式:

值为逻辑(TRUE 或 FALSE)的常量、字段名、变量名或表达式。表达式可以包括比较、逻辑运算符和括号。

您也可以省略 DO: END。当要执行的 IF 代码只包含一条语句时:

IF TRUE THEN DISPLAY "TRUE".
ELSE DISPLAY "NOT TRUE".

您也可以使用其他块语句(例如 FOR 或 REPEAT),但这很可能只会创建难以阅读的代码。

【讨论】:

  • 超过 1 个则使用 CASE,参数结束:-D
【解决方案2】:

与其使用嵌套的 IF/ELSE,不如使用这样的 CASE 语句:

CASE varname:
WHEN ""      THEN DO: /*something */ END.
WHEN "value" THEN DO: /*something */ END.
OTHERWISE         DO: /*something */ END.
END CASE.

查看此声明中的文档以获取更多详细信息。

【讨论】:

    【解决方案3】:

    我发现了这个问题。这不是由编码错误引起的。显然 Progress 不喜欢 cmets 太靠近代码,这导致它抛出错误。

    END. /*end of if, then do:*/ => This is ok.
    END./*end of if, then do:*/ => This caused the issue comments too close to statement.
    

    感谢 Tim Kuehn 的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多