COBOL段落编号背后的逻辑是什么?

时间:2018-05-18 07:17:38

标签: optimization cobol mainframe zos

我已多次看到以下段落命名结构:

nnnn-PARAGRAPH-NAME.

nnnn代表4位数字。

这是一个完整的例子:

0000-MAINLINE. 
    PERFORM 1000-INITIALIZE-THE-PROGRAM. 
    PERFORM 2000-PROCESS-1-BILLING-RECORD 
        UNTIL 88-100-ALL-RECORDS-PROCESSED. 
    PERFORM 3000-TERMINATE-THE-PROGRAM. 
    GOBACK. 
1000-INITIALIZE-THE-PROGRAM. 
    PERFORM 1100-VALIDATE-CONTROL-CARD. 
    PERFORM 1200-OPEN-THE-FILES. 
    PERFORM 8000-GET-NEXT-BILLING-RECORD. 
1100-VALIDATE-CONTROL-CARD. 
    PERFORM 1110-READ-CONTROL-CARD. 
    PERFORM 1120-EDIT-CONTROL-CARD. 
1110-READ-CONTROL-CARD. 
    PERFORM 9000-ABEND-THE-PROGRAM.  *> IF A READ ERROR OCCURRED 
1120-EDIT-CONTROL-CARD. 
    PERFORM 9000-ABEND-THE-PROGRAM   *> IF AN EDIT ERROR OCCURRED 
1200-OPEN-THE-FILES. 
    PERFORM 9000-ABEND-THE-PROGRAM   *> IF AN OPEN ERROR OCCURRED 
2000-PROCESS-1-BILLING-RECORD. 
    PERFORM 2100-CALCULATE-BILLABLE-AMT. 
    PERFORM 2200-PRINT-BILLING-REPORT. 
    PERFORM 8000-GET-NEXT-BILLING-RECORD. 
2200-PRINT-BILLING-REPORT. 
    PERFORM 2210-PRINT-REPORT-HEADER.  *> WHEN IT'S NEEDED 
3000-TERMINATE-THE-PROGRAM. 
    PERFORM 3100-CLOSE-THE-FILES. 
    PERFORM 3200-DISPLAY-FINAL-MESSAGES. 
8000-GET-NEXT-BILLING-RECORD. 
    PERFORM 9000-ABEND-THE-PROGRAM.    *> IF A READ ERROR OCCURRED 
9000-ABEND-THE-PROGRAM. 

因此,我的问题如下:

  1. 现在这个被弃用了吗?
  2. 为什么(或者是)这是一个好习惯?
  3. 段落编号遵循哪个标准?

3 个答案:

答案 0 :(得分:6)

解释

数字告诉你程序结构。在这个计划中:

  • 1 * 都是初始化程序,1000 -...调用1100 -...和1200-。而1100 -...拨打1110 -...和1120 -...等
  • 2 * 是主要的处理逻辑程序
  • 3 * 是最终处理逻辑程序
  • 8000 从任何地方调用
  • 9000 错误程序

所以程序调用结构是

                                     0000-
           +---------------------------+------------------------------+                             
         1000-                       2000-                          3000-
  +--------+------+             +------+------+               +-------+-------+ 
1100-           1200-         2100-         2200-           3100-           3200-

 etc...

具体问题

  1. 现在这个被弃用了吗? 绝对不,应该在其他程序语言中使用。学习编号系统
  2. 为什么(或者是)这是一个好习惯?这是一种很好的做法,因为它告诉你
    • 程序如何相互关联 - 这可能非常方便。
    • 进入程序的呼叫结构
    • 提高理解力
    • 节省了大量时间。如果您找到2000 - ,那么您将进入主处理逻辑
  3. 段落编号遵循哪个标准?
  4. 其他要点

    一旦你习惯了编号系统,它就会使理解程序变得更加容易。不同的网站做的不同,有些网站也可以使用字母/而不是数字,例如

          Perform A000-Initialise
          Perform B000-Main
          Perform C000-Finalise
    
     A000-Initialise.
         Perform A100-...
         etc
    

    在任何一个站点,他们将在所有(或大多数程序)中使用相同的编号标准。

    网站可能会为特定目的保留第一个数字/字母。如果使用A000-,B000-格式,这种情况更常见。您可以使用 R ... 进行文件读取 W ... ,用于文件写入 S ... for SQL 调用等。

    编号系统使经验丰富的程序员的生活更轻松。使用其他语言后,应使用Cobol以外的其他程序语言。

答案 1 :(得分:5)

4位数字并不真正用于任何事情但是如果程序结构正确,它可以帮助有经验的程序员了解他们的方式。让我们看一下这个例子:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM OPEN-FILES
   PERFORM VALIDATE-CONTENTS
   PERFORM PROCESS-DATA
   PERFORM WRITE-REPORTS
   PERFORM CLOSE-FILES
.
CLOSE-FILE.
   PERFORM CLOSE-FILE1
   PERFORM CLOSE-FILE2
   PERFORM CLOSE-FILE3
.
PROCESS-DATA.
   PERFORM VARYING X 
              FROM 1 BY 1
             UNTIL X > NUMBER-OF-RECS
      PERFORM DO-THE-THINGS
   END-PERFORM
.
WRITE-REPORTS.
   DISPLAY 'THIS IS MY REPOR'.
.
VALIDATE-CONTENTS.
   IF REC NOT EQUAL SPACES
       SET GOOD-REC TO TRUE
   END-IF
.
OPEN-FILES.
   PERFORM OPEN-FILE1
   PERFORM OPEN-FILE2
   PERFORM OPEN-FILE3
.
DO-THE-THINGS.
   CONTINUE
.

我知道程序很愚蠢,并没有多大意义,但这个例子没问题。尝试按照此程序的流程。如果我们为每个段落开始分配一个数字并且增加一个(因此CLOSE-FILE为1,PROCESS-DATA为2 ......)那么主线就像这样跳转:

5

4

2,6

3

1

对于像这样的小型程序来说“好”,因为我们仍然可以找到自己的方式。现在想象你的程序长达数千行,一切都不正常。是的,你可以弄清楚,但如果它看起来像这样会更容易:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM A0000-OPEN-FILES
   PERFORM B0000-VALIDATE-CONTENTS
   PERFORM C0000-PROCESS-DATA
   PERFORM D0000-WRITE-REPORTS
   PERFORM E0000-CLOSE-FILES
.
A0000-OPEN-FILES.
   PERFORM OPEN-FILE1
   PERFORM OPEN-FILE2
   PERFORM OPEN-FILE3
.
B0000-VALIDATE-CONTENTS.
   IF REC NOT EQUAL SPACES
       SET GOOD-REC TO TRUE
   END-IF
.
C0000-PROCESS-DATA.
   PERFORM VARYING X 
              FROM 1 BY 1
             UNTIL X > C1000-NUMBER-OF-RECS
      PERFORM DO-THE-THINGS
   END-PERFORM
.
C1000-DO-THE-THINGS.
   CONTINUE
.
D0000-WRITE-REPORTS.
   DISPLAY 'THIS IS MY REPOR'.
.
E0000-CLOSE-FILE.
   PERFORM CLOSE-FILE1
   PERFORM CLOSE-FILE2
   PERFORM CLOSE-FILE3
.

在我的商店,我们这样做的方式是主线上的所有内容都以字母开头(因此是A0000)。如果A0000调用段落将被称为A1000。如果A1000调用它将是A1100。所以我们使用该字符来表示嵌套。所以我可能会有这样的东西:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM A0000-DO-SOMETHING
   PERFORM B0000-SHUTDOWN
.
A0000-DO-SOMETHING.
   PERFORM A1000-DO-MORE
   PERFORM A2000-VALIDATE-STUFF
.
A1000-DO-MORE.
   PERFORM A1100-DO-THING1
   PERFORM A1200-DO-THING2
   PERFORM A1300-DO-THING3
.

简而言之,它只是帮助导航和遵循程序。没有什么可以阻止你省略数字,但是一旦程序变得更大而其他人需要维护它,数字将是一个很大的帮助。我不喜欢处理结构不正确的程序,因为它使调试和学习程序变得更加困难。特别是当我使用终端仿真器时,一次只能看到20行。

答案 2 :(得分:0)

段落名称仅为标签。您可以使用您喜欢的任何格式。但是,为了有用,您应该使用一些标准 - 您可能会被迫遵守您的商店标准。编号可以反映您编写它们的顺序,执行的顺序,调用的深度(para1执行para2执行para3等)或者您可以使用alpha表示。由你(和你的老板)决定。