我对COBOL完全不熟悉,我想知道:
之间似乎没有区别
DISPLAY "foo"
和
DISPLAY "foo".
一行末尾的点实际上做了什么?
我应该何时使用/避免它?
答案 0 :(得分:6)
句号结束“句子”。它会对你的逻辑产生影响。考虑...
IF A = B
PERFORM 100-DO
SET I-AM-DONE TO TRUE.
...和...
IF A = B
PERFORM 100-DO.
SET I-AM-DONE TO TRUE
这两个例子都以IF结束。首先,I-AM-DONE 88级有条件设置,第二级无条件设置。
许多人更喜欢使用显式范围终结符,并且通常仅在物理行上使用一个句点来使其突出,以结束段落。
答案 1 :(得分:5)
我是从内存中输入的,所以如果有人有更正,我会很感激。
Cobol 1968要求使用期限来结束部门名称,程序部门段落名称或程序部门段落。每个数据分割元素都以句点结束。
Cobol 68中没有明确的范围终止符,如END-IF。一段时期也被用来结束范围。 1974年的Cobol带来了一些与时期没有任何关系的变化。
而不是试图记住时期的规则,Cobol程序员倾向于用一段时间来结束Cobol程序中的每个句子。
随着Cobol 1985中引入范围终止符,Cobol编码器可以消除程序划分段落中的大多数时期。 Cobol 85程序的程序划分所需的唯一期限是终止PROCEDURE DIVISION声明,终止第一段/部分标题之前的代码(如果有的话),终止段落/部分标题,终止段落/部分并终止程序(如果没有段落/部分)。
不幸的是,这吓坏了编码为Cobol 68和74标准的Cobol程序员。到目前为止,许多Cobol商店都执行了一个编码规则,用一个句号来结束每个程序分割句。
答案 2 :(得分:4)
何处使用!
有两种形式可以使用点。
您可以在SECTION中的每个VERB后使用POINT。 实施例:
<00> 0000 - 示例部分。向WK-I移动0。
直到WK-I大于100 显示WK-I 添加1到WK-I END-PERFORM。
显示WK-I。
如果WK-I等于零 显示WK-I END-IF。
0000-EXAMEPLE-END。 EXIT。
请注意,我们在每个VERB之后使用point,除了PERFORM,IF,ETC之外......
使用的另一种形式是:在部分结尾处仅使用一个点,如下所示:
<00> 0000 - 示例部分。移动0到WK-I
直到WK-I大于100 显示WK-I 添加1到WK-I END-PERFORM
显示WK-I
如果WK-I等于零 显示WK-I END-IF
。 &lt; ========点这里!!!!!!!只有在这里!
0000-EXAMEPLE-END。 EXIT。
但是,我们总是在EXIT和SECTION之后......
答案 3 :(得分:1)
如果是我的选择,我会在必要时使用全站/句号。但是,当地标准通常会另有规定:所以就这样吧。
由于编码器的“大脑”被安全地留在了停车场,当代码“with”被复制到代码“没有”时,全停/周期引起的问题是偶然发生无条件的事情。
需要注意的另一件事是(希望)在IBM Mainframe Cobol中使用NEXT SENTENCE的“旧”程序。 “NEXT SENTENCE”表示“在下一个句号/句号之后”,在“稀疏句号/句号”代码中是段落/节的结尾。意外等待发生。获取规格更改以允许“NEXT SENTENCE”更改为“CONTINUE”。
答案 4 :(得分:0)
在我的cobol 85程序中测试了这一点,方法是删除程序中的所有时间段,并且效果很好。
示例:
PROCEDURE DIVISION.
MAIN-PROCESS.
READ DISK-IN
AT END
DISPLAY "NO RECORDS ON INPUT FILE"
STOP RUN
ADD 1 TO READ-COUNT.
PERFORM PROCESS-1 UNTIL END-OF-FILE.
WRITE-HEADER.
MOVE HEADER-INJ-1 TO HEADER-OUT-1
WRITE HEADER-OUT-1.
CLOSE-FILES.
CLOSE DISK-IN
CLOSE DISK-OUT
DISPLAY "READ: " READ-COUNT
DISPLAY "WRITTEN: " WRITE-COUNT
SORT SORT-FILE ON ASCENDING SER-S
USING DISK-OUT
GIVING DISK-OUT
STOP RUN.