COBOL语法错误'unexpected'(使用Display命令

时间:2017-10-20 08:07:10

标签: cobol

大家好,我现在正在学习COBOL,而且我有点困难。 我目前正在使用德语书Insider COBOL进入这个主题。

现在问题: 我正在重建介绍示例,它是总价的计算器,您写下产品数量,价格和增值税,程序将为您提供净额,增值税金额和总金额。

最后我看到我在代码中有一个错字,所以我修复了它。 在那之后,整个程序部门在我创建gui的所有显示器中疯狂。

在语法错误之后,每个错误都说“语法错误,意外(”有些人说“期待OMITTED或Identifier”)。 如果thentntax已经改变了,我用google搜索,但我没有真正得到它,怎么回事。

以下是代码:

   PROCEDURE DIVISION.
  ******************************************************************
   B100.
  ******************************************************************
  *****    Ausgabe Bildkopf
  ******************************************************************
       DISPLAY (1,1) ERASE.                *>Löschen des Bildschirms
       DISPLAY (1,1)
       'B R U T T O P R E I S B E R E C H N U N G            PROG01'
               WITH HIGHLIGHT.
       DISPLAY (2,1) S-Strich.
  ******************************************************************
  *****    Einlesen der Daten 
  ******************************************************************
   B150.
       DISPLAY (3,1) 
           'MENGE..............................:'.
       ACCEPT  (3,40)  E-MENGE.
       DISPLAY (4,1) 
           'EINZELPREIS:.......................:'.
       ACCEPT  (4,40)  E-PREIS.
       DISPLAY (5,1)  
           'MW-ST-PROZENTSATZ..................:'.
       ACCEPT  (5,40) E-MWST.
       DISPLAY (6,1) S-Strich.
  ******************************************************************
  *****    Berechnung
  ******************************************************************
   B200.
       COMPUTE S-NETTO = E-MENGE*E-PREIS.
       COMPUTE
          S-MWST-BETR = S-NETTO*E-MWST/100.
       COMPUTE S-BRUTTO = S-NETTO+S-MWST-BETR.
  ******************************************************************
  *****    Ausgabe der Ergebnisse
  ******************************************************************
   B300.
       MOVE    S-NETTO     TO  A-NETTO.     *>Übertragen in Ausgabe
       DISPLAY (8,1)
           'NETTOWERT:....................:'.
       DISPLAY (8,30) A-NETTO.
       MOVE    S-MWST-BETR TO  A-MWST-BETR.
       DISPLAY (9,1) 
           'MEHRWERTSTEUER:...............:'.
       DISPLAY (9,30)  A-MWST-BETR.
       MOVE    S-BRUTTO    TO  A-BRUTTO.
       DISPLAY (10,1)
           'BRUTTOPREIS:..................:'.
       DISPLAY (10,30) A-BRUTTO.
  ******************************************************************
  *****    Ausgabe Systemzeile
  ******************************************************************
   B400.
       DISPLAY (23,1)  S-Strich    ERASE.
       DISPLAY (24,1)  'WEITERE BERECHNUNGEN (J/N) :'.
       ACCEPT  (24,40) S-WEITER    WITH    AUTO-SKIP.
       IF  S-WEITER    = 'J'   *> es werden nur Großbuchstaben
           GO TO   B100        *> aktzeptiert
       END-IF.
       IF  S-WEITER = 'N'
           GO To B900
       END-IF.
  *****    falsche Eingabe:
       GO TO B400.

我希望我不会失明或事先提前谢谢你们。)

1 个答案:

答案 0 :(得分:2)

从代码和错误消息判断,看起来您正在尝试使用GnuCOBOL编译Microsoft COBOL。可悲的是,GnuCOBOL(尚未)认识到微软风格的位置指定者。因此,您必须手动将每个DISPLAYACCEPT语句翻译为标准COBOL;例如,

 DISPLAY (3,1) 
     'MENGE..............................:'.
 ACCEPT  (3,40)  E-MENGE.

变为

 DISPLAY
     'MENGE..............................:'
     AT LINE 3 COL 1
 ACCEPT E-MENGE LINE 3 COL 40.

更多问题是ERASE中的DISPLAY短语。最接近的GnuCOBOL必须是Micro Focus'DISPLAY SPACES扩展名。要使用它,请更改,例如

   DISPLAY (23,1)  S-Strich    ERASE.

   DISPLAY S-Strict LINE 23 COL 1, SPACES