2014-06-18 2 views
3

나는 진보 멍청한 놈이야, 실제로 기본 블록에 문제가있다.진도 if 문

아래의 문제는 if else 문에 있습니다. if, then, else 중 하나를 사용할 때 잘 작동하지만, if 부분에 둘 이상의 명령문을 넣으려는 경우 블록에 넣어야하므로 if, then을 사용합니다. 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*/ 
+0

묻는 질문은 우리가 배울 것입니다 :) 좋은 일은 문법 검사를하는 것입니다. 이미 문제가 있다는 것을 강조해야합니다. - 이해할 수없는 것과 같습니다. - "END" – AquaAlex

+0

ELSE와 DO 사이에 (IF myRow [5] = ""THEN) 필요하지 않습니다. <>와 = :-) 옵션이 2 개만 있기 때문에 – AquaAlex

답변

1

문제점을 파악했습니다. 이것은 코딩 오류로 인한 것이 아닙니다. 분명히 진행 상황은 코드에 너무 가까운 주석을 좋아하지 않아서 오류가 발생합니다.

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에게 감사드립니다.

+0

Jensd에게도 감사드립니다. –

3

오히려 중첩 사용하는 것보다/ELSE 경우, 당신은 너무 같은 CASE 문을 사용하여 더 나을 것 :

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

은 자세한 내용은이 성명에서 문서를 확인하십시오.

+0

+1 미안하지만 더 줄 수는 없습니다 : D – AquaAlex

3

매우 간단한 구문 오류 : END 문 다음에 적어도 하나의 공백이 필요합니다.

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

Tim의 훌륭한 조언 (사례 사용)을 따르고 싶지 않으면. 이것은 IF 구문의 "완전한"구문입니다.

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

expressions:

A constant, field name, variable name, or expression whose value is logical (TRUE or FALSE). The expression can include comparisons, logical operators, and parentheses.

또한 DO을 남길 수 있습니다 : END를. 는 IF 코드가 실행될 때 단 하나의 문으로 구성 또한 (예 : FOR 또는 반복과 같은) 다른 블록 문을 사용할 수 있지만 읽기 어려운 코드를 생성 할 가능성이 가장 높은 단지

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

.

+2

1 이상 CASE, 인수의 끝을 사용하십시오 : - D – AquaAlex