如果声明进展

时间:2014-06-18 13:48:48

标签: progress-4gl openedge

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

问题出在我的if else语句中。当它只是if,然后,然后,它工作正常,但是当我想在if部分放入多个语句时,我必须将它放在一个块中,所以我使用if,然后执行:否则,那么做:但这些对我来说都不起作用。您可以看到任何明显的错误?我的错误消息是**冒号后跟空格终止一个语句。 (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*/

3 个答案:

答案 0 :(得分:3)

不是使用嵌套的IF / ELSE,而是最好使用CASE语句,如下所示:

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

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

答案 1 :(得分:3)

一个非常简单的语法错误: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),但这很可能只会创建难以阅读的代码。

答案 2 :(得分:1)

我想出了这个问题。这不是由编码错误引起的。显然,Progress不喜欢评论过于接近代码,导致它抛出错误。

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的回应。