2011-03-15 75 views
2

嘿,我还有一个任务要在COBOL中完成一个季度,而我现在不在。问题是我在ACCEPT SCREEN-IMAGE命令中得到一个语法错误,这个程序需要用户输入。我没有看到我做错了什么,所以我被卡住了。我相信其他一切都是正确的,所以一旦发现我已经完成了。这里是代码:制作屏幕(COBOL)

SCREEN SECTION. 
    01 SCREEN-IMAGE. 
     05 BLANK SCREEN 
      BACKGROUND-COLOR 0 
      FOREGROUND-COLOR 15. 
     05 LINE 02 COLUMN 02 PIC X(8) 
       FROM CURRENT-TIME. 
     05 LINE 02 COLUMN 26 PIC X(28) 
       FROM TITLE-LINE 
       FOREGROUND-COLOR 09. 
     05 LINE 02 COLUMN 40 PIC X(8) 
       FROM DATE-TODAY. 
     05 LINE 05 COLUMN 02 
       VALUE 'FUNCTION CODE:' 
       FOREGROUND-COLOR 09. 
     05 LINE 05 COLUMN 12 PIC X(3) 
       FROM CODE-SCREEN AUTO. 
     05 LINE 05 COLUMN 17 
       VALUE '<ADD, CHG, DEL, INQ, END>'. 
     05 LINE 09 COLUMN 17 
       VALUE 'REP CODE:' 
       FOREGROUND-COLOR 09. 
     05 LINE 09 COLUMN 29 PIC X(3) 
       FROM REP-SCREEN AUTO. 
     05 LINE 11 COLUMN 17 
       VALUE 'NAME:' 
       FOREGROUND-COLOR 09. 
     05 LINE 11 COLUMN 29 PIC X(3) 
       FROM NAME-SCREEN AUTO. 
     05 LINE 13 COLUMN 17 
       VALUE 'DISTRICT:' 
       FOREGROUND-COLOR 09. 
     05 LINE 13 COLUMN 29 PIC X(3) 
       FROM DIST-SCREEN AUTO. 
     05 LINE 15 COLUMN 17 
       VALUE 'COMMISSION RATE:' 
       FOREGROUND-COLOR 09. 
     05 LINE 15 COLUMN 29 PIC X(3) 
       FROM COM-SCREEN AUTO. 
     05 LINE 17 COLUMN 17 
       VALUE 'DATE ADDED:' 
       FOREGROUND-COLOR 09. 
     05 LINE 17 COLUMN 29 PIC X(10) 
       FROM ADD-DATE. 
     05 LINE 19 COLUMN 17 
       VALUE 'DATE CHANGED:' 
       FOREGROUND-COLOR 09. 
     05 LINE 19 COLUMN 29 PIC X(3) 
       FROM CHANGE-DATE. 
     05 LINE 24 COLUMN 17 PIC X(29) 
       FROM ERROR-DISPLAY. 

    PROCEDURE DIVISION. 
    100-MAIN. 
     OPEN I-O REP-MASTER-FILE 
     CALL 'DATETIME' USING DATE-TIME-PASS-AREA 
     MOVE DATE-MMDDYY-SLASHES TO DATE-TODAY 
     MOVE TIME-HHMMSSXX-COLONS TO CURRENT-TIME 
     PERFORM UNTIL CODE-SCREEN = 'END' OR 'end' 
      DISPLAY SCREEN-IMAGE 
      ACCEPT SCREEN-IMAGE 
      MOVE 0 TO ERROR-COUNT 
      PERFORM 150-CHECK-COM 
      PERFORM 140-CHECK-DIST 
      PERFORM 130-CHECK-NAME 
      PERFORM 120-CHECK-REP 
      PERFORM 110-CHECK-CODE 
      IF ERROR-COUNT = 0 
       PERFORM 200-PROCESS-ONE-RECORD 
      END-IF 
     END-PERFORM 

     CLOSE REP-MASTER-FILE 
     STOP RUN. 

任何和所有的帮助将不胜感激。

+0

为什么在'DISPLAY'或'ACCEPT'命令之后没有一段时间? – Gabe 2011-03-15 03:41:39

+0

@加贝你需要那些吗?在我给出的例子中没有句点。 – Kimmy1235 2011-03-15 03:54:25

+0

你能发布错误信息吗?这可能有助于确定错误。您确定您正在使用的数据字段在程序中以前已正确定义(FD,WORKING-STORAGE)。 – colemanj 2011-03-15 10:42:46

回答

2

@Gabe与许多人认为的相反,一段时间(句号)并不是结束COBOL语句的唯一方法。

Move A To B 
Move C To D 

是逻辑上等同于

Move A To B. 
Move C To D. 

它变得疯狂的是

If A = B 
    Move C To D 
    Add 1 To E. 

如果我把一个时期的d,1将被添加到E无条件后。在COBOL 85标准中添加了明确的范围终结了许多语句,所以我们得到了更容易直观解析结构

If A = B 
    Move C To D 
    Add 1 To E 
End-If 

现在,如果我把一个时期的d我会得到一个编译错误后。我认识的大多数COBOL程序员现在使用明确的范围终止符,并且只结束段落名称和段落段落,否则将它们从程序部门中删除。

+0

End-If是期间的替代品。我一直不得不通过保持代码并放入End-If,其中句点一旦终止if语句。我认为这是因为一些较新的编译器不喜欢这个时期,并且End-if仅仅是更友好的用户界面。 – 2014-01-29 14:01:39

2

也许您需要在屏幕上输入和/或更新几个字段才能ACCEPT呢?我认为输入字段在其描述中有一个TO短语,更新字段有一个USING短语。我在屏幕描述中看到的唯一东西是文字和FROM短语。基本上没什么可以ACCEPT