2011-03-15 84 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