为什么这会导致Cobol出错?

时间:2014-03-06 17:58:20

标签: cobol

为什么下面的if语句需要一个NEXT SENTENCE,因为语句的IF和ELSE部分都有一个语句。

问题:为什么这是if语句中的错误。

CHECK-PARM.                                                                   
    IF NAME = 'SW89JS' THEN                                               1183
       E-NAME = 'FALSE'                                                       
  

预期动词或“NEXT SENTENCE”,但找到“E-NAME”。声明被丢弃了。

    ELSE                                                                      
       E-NAME = 'TRUE'                                                        
  

“电子名称”无效。跳到下一个动词,句点或过程名称定义。

       P-NAME = 'SW89JS'                                                      
    END-IF. 

2 个答案:

答案 0 :(得分:1)

由于它是在这个答案中埋葬的地方,我将重复听到,甚至将它扩展一点。

您有一个正在测试的值。从名称来看,它可能来自JCL中EXEC卡上的PARM。

测试值,在值的结果上设置一个标志(TRUE / FALSE文字),稍后再使用。

使用88,您可以将该parm值作为标志本身。

01  NAME PIC X(6).
    88  IT-IS-SW89JS VALUE "SW89JS".

现在你永远不会让你的旗帜失去一步,因为你只有一面旗帜。少了一个要理解并可能出错的旗帜。

因为我们在COBOL中没有assignments

MOVE 'TRUE' TO E-NAME

MOVE data-name-with-value-true TO E-NAME

01  FILLER PIC X VALUE SPACE.
    88  IT-IS-SW89JS VALUE "Y".

SET IT-IS-SW89JS TO TRUE

01  NAME PIC X(6).
    88  IT-IS-SW89JS VALUE "SW89JS".

最后忘记了其他任何事情。

COBOL与许多其他语言不同。没有字符串,你可能知道它们。没有数组,你可能知道它们。没有任务。没有布尔。没有用户编写的功能。几个内在函数。没有公共功能库。它确实有其他一些东西: - )

评论中的几点。

COBOL是一种固定的语言。固定长度字段,固定长度表。 30字节字段中的数据长度为30个字节。就数据所代表的内容而言,字段内容的长度是程序员必要时必须解决的问题。大多数情况下我们不需要它,所以我们不需要解决它。

固定性也有限制。因此,我们想办法以不同的方式做事,所以我们没有限制,等待破产,悬在我们头上。我们不只是选择一个看起来可能使我们的生活变得容易的函数(编写的代码更少),无论它如何执行任务。通常我们还没有函数,我们编写特定的代码,通过CALL重用于特定的系统或系统集。

COBOL程序可能需要更长的时间来编写(我说可能因为90%以上的时间是通过复制一个接近你想要的程序开始的问题,然后使其具体化)但该程序可能有30年的寿命。它的生命可能会多次改变。它可能永远不会改变,但在此期间需要多次理解。

从概念上讲,COBOL是一种与赋值/字符串/数组完全不同的语言。如果你应该在没有经过培训的情况下拿起COBOL,那么会有很多陷阱。

是的,布鲁斯马丁,我想COBOL确实有一个任务:COMPUTE。左侧只能是数字或数字编辑,虽然可以有多个字段,右侧只能有数字(或内部函数返回数字)。它只支持基本的数学运算符(+, - ,,/,* )。如果需要,它允许舍入最终答案,并允许拦截“溢出”(ON SIZE ERROR)。

它可以用作简单的任务:

COMPUTE A = B

这将生成与以下相同的代码:

MOVE B TO A

有些人这样做,虽然我从来没有真正解决过原因。有传言说这意味着你可以使用ON SIZE ERROR(如果你使用它,不要忘记END-COMPUTE)来捕获溢出。

然而,我总是把我的字段变得足够大,或者在我想要的结果时故意截断,所以我真的不明白。

简而言之,欢迎来到COBOL。不要指望它与您使用的任何其他语言一样。

答案 1 :(得分:0)

比尔说,问题是:

   E-NAME = 'FALSE'

Cobol (与大多数其他语言不同)中,每个语句都以控制字开头 e.g。

   Compute abc = 123
   Move 'FALSE'              to E-NAME
   Perform  abc
   Call  'xyz'

使用 Cobol 左侧上的控制字会告诉您该语句正在做什么。

同样,比尔说,在Cobol中,布尔值通常使用88级来定义:

   01  FILLER PIC X VALUE SPACE.
       88  IS-ENAME     VALUE "Y".
       88  ENAME-OFF    VALUE "N".

并且您的代码变为

   IF NAME = 'SW89JS' THEN                                               
      Set ENAME-OFF             to true                         
   ELSE                                                                      
      Set IS-ENAME              to true                                      

      Move 'SW89JS'             to P-NAME
   END-IF.