COBOL 段落编号背后的逻辑是什么?
What is the logic behind COBOL paragraph numbering?
下面的段落命名结构我已经看过很多次了:
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.
因此,我的问题如下:
- 现在这个已经弃用了吗?
- 为什么这是(或曾经是)一个好习惯?
- 段落编号遵循什么标准?
段落名称只是标签。您可以使用任何您喜欢的格式。但是,要有用,您应该使用一些标准 - 您可能会被您的商店标准强制使用。编号可以反映您编写它们的顺序、执行的顺序、调用的深度(para1 执行 para2 执行 para3 等)或者您可以使用 alpha 表示。由你(和你的老板)决定。
说明
数字告诉你程序结构。在这个程序中:
- 1*都是初始化程序和1000-...调用1100-...和1200-。而 1100-... 调用 1110-... 和 1120-... 等等
- 2*是程序的主要处理逻辑
- 3*是程序的定型处理逻辑
- 8000 从任何地方呼叫
- 9000 错误程序
所以程序调用结构为
0000-
+---------------------------+------------------------------+
1000- 2000- 3000-
+--------+------+ +------+------+ +-------+-------+
1100- 1200- 2100- 2200- 3100- 3200-
etc...
具体问题
- 现在这个已经弃用了吗? 绝对不会,其他过程化语言应该都会用到。学习编号系统
- 为什么(或曾经)这是一个好习惯?这是很好的做法,因为它告诉你
- 过程如何相互关联 - 这可能非常方便。
- 获取过程的调用结构
- 增进理解
- 节省了很多时间。例如,如果您 找到 2000- 您将转到主处理逻辑
- 段落编号遵循什么标准?
其他点
一旦你习惯了编号系统,它就会让你更容易理解程序。不同网站的做法不同,有些网站可能使用字母作为数字的 well/instead,例如
Perform A000-Initialise
Perform B000-Main
Perform C000-Finalise
A000-Initialise.
Perform A100-...
etc
在任何一个站点,他们将在所有(或大多数程序)中使用相同的编号标准。
网站可能会保留第一个 number/letter 用于特定目的。这在使用 A000-、B000- 格式时更为常见。您可以使用 R... 文件 reads W... 文件 写 S... SQL 调用等
编号系统让有经验的程序员的生活更轻松。用过其他语言,应该会用到Cobol以外的其他过程语言。
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 行时。
下面的段落命名结构我已经看过很多次了:
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.
因此,我的问题如下:
- 现在这个已经弃用了吗?
- 为什么这是(或曾经是)一个好习惯?
- 段落编号遵循什么标准?
段落名称只是标签。您可以使用任何您喜欢的格式。但是,要有用,您应该使用一些标准 - 您可能会被您的商店标准强制使用。编号可以反映您编写它们的顺序、执行的顺序、调用的深度(para1 执行 para2 执行 para3 等)或者您可以使用 alpha 表示。由你(和你的老板)决定。
说明
数字告诉你程序结构。在这个程序中:
- 1*都是初始化程序和1000-...调用1100-...和1200-。而 1100-... 调用 1110-... 和 1120-... 等等
- 2*是程序的主要处理逻辑
- 3*是程序的定型处理逻辑
- 8000 从任何地方呼叫
- 9000 错误程序
所以程序调用结构为
0000-
+---------------------------+------------------------------+
1000- 2000- 3000-
+--------+------+ +------+------+ +-------+-------+
1100- 1200- 2100- 2200- 3100- 3200-
etc...
具体问题
- 现在这个已经弃用了吗? 绝对不会,其他过程化语言应该都会用到。学习编号系统
- 为什么(或曾经)这是一个好习惯?这是很好的做法,因为它告诉你
- 过程如何相互关联 - 这可能非常方便。
- 获取过程的调用结构
- 增进理解
- 节省了很多时间。例如,如果您 找到 2000- 您将转到主处理逻辑
- 段落编号遵循什么标准?
其他点
一旦你习惯了编号系统,它就会让你更容易理解程序。不同网站的做法不同,有些网站可能使用字母作为数字的 well/instead,例如
Perform A000-Initialise
Perform B000-Main
Perform C000-Finalise
A000-Initialise.
Perform A100-...
etc
在任何一个站点,他们将在所有(或大多数程序)中使用相同的编号标准。
网站可能会保留第一个 number/letter 用于特定目的。这在使用 A000-、B000- 格式时更为常见。您可以使用 R... 文件 reads W... 文件 写 S... SQL 调用等
编号系统让有经验的程序员的生活更轻松。用过其他语言,应该会用到Cobol以外的其他过程语言。
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 行时。