【问题标题】:What is the logic behind COBOL paragraph numbering?COBOL 段落编号背后的逻辑是什么?
【发布时间】:2018-05-18 07:17:38
【问题描述】:

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

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. 段落编号遵循哪些标准?

【问题讨论】:

    标签: optimization cobol mainframe zos


    【解决方案1】:

    说明

    数字告诉您程序结构。在这个程序中:

    • 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. 段落编号遵循哪些标准?

    其他要点

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

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

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

    网站可能会为特定目的保留第一个数字/字母。这在使用 A000-、B000- 格式时更为常见。您可以将 R... 用于文件 reads W... 用于文件 writes S... 用于SQL 调用等

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

    【讨论】:

    • @MarkSchultheiss 那么在 1000 和 2000 处调用的 FETCH CURSOR 段落应该放在 8000 处吗?干杯!
    • FETCH CURSOR 应该是 8000 - 检查您站点上的其他程序是如何做到的。
    • 也许将“都是初始化程序”改写为“程序初始化程序”
    • 我们处理实用程序类型的东西的方式是启动 Z9000 并在有另一个实用程序时增加数字。所以到处叫的都是Z9开头的。
    【解决方案2】:

    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

    对于像这样的小程序来说,“ok”,因为我们仍然可以找到自己的方式。现在想象你的程序有数千行长,而且一切都乱了套。是的,你可以弄清楚,但如果它看起来像这样会不会容易得多:

    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 行时。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-06
        • 2017-10-17
        • 1970-01-01
        • 2018-06-18
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多