我是一个进步的新手,实际上有基本块的问题。
下面的问题是在我的if else语句。当它只是if, then, else then时,它工作得很好,但是当我想在if部分中放入多个语句时,我必须把它放在一个块中,所以我使用if, then do: else, then do:但这些对我来说不起作用。您可以看到任何明显的错误吗?我的错误信息是**冒号后面跟着空格终止一个语句。(199)
INPUT FROM "r:_contentstephen4gl appsdploutput.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*/
一个非常简单的语法错误:END-statement后面至少需要一个空格。
END. /*end of if, then do:*/
/* ^ Make sure there's space above here! */
如果你不想遵循tim的回答(use 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),但这很可能只会创建难以阅读的代码。
与其使用嵌套的IF/ELSE,不如使用CASE语句:
CASE varname:
WHEN "" THEN DO: /*something */ END.
WHEN "value" THEN DO: /*something */ END.
OTHERWISE DO: /*something */ END.
END CASE.
查看此语句的文档以了解更多细节。
我找到了问题所在。这不是由编码错误引起的。显然,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的回复。