从数据结构中创建Cobol中的TABLE?

时间:2014-03-06 19:11:31

标签: cobol

我需要从下面的数据结构中创建一个表,因为我不确定每行一行的记录数将在我的输入文件中。如果我可以制作一张桌子,那么我将能够在稍后的时间循环播放它们,这是我需要做的。

**问题:如何在数据结构之前制作表格?        B部分:Cobol中的阵列是100次发生的事件

01 PRECORD.                             
    05 JE.                              
       10 NE          PIC X(6)  VALUE SPACES.
       10 NM          PIC X(2)  VALUE SPACES.
    05 FILL1          PIC X(16) VALUE SPACES.
    05 TM             PIC X(7)  VALUE SPACES.
    05 FILL2          PIC X(6)  VALUE SPACES.
    05 TT             PIC X(7)  VALUE SPACES.
    05 FILL3          PIC X(13) VALUE SPACES.
    05 TTY            PIC X(10) VALUE SPACES.
    05 FILL4          PIC X(13) VALUE SPACES.
01 PRECORD. 
  02 table-counter  <-- this is used to hold the number of records                            
  02 tTable occurs 300 times. <-- creates a table with three hundred occurences
    05 JE.                              
       10 NE          PIC X(6)  VALUE SPACES.
       10 NM          PIC X(2)  VALUE SPACES.
    05 FILL1          PIC X(16) VALUE SPACES.
    05 TM             PIC X(7)  VALUE SPACES.
    05 FILL2          PIC X(6)  VALUE SPACES.
    05 TT             PIC X(7)  VALUE SPACES.
    05 FILL3          PIC X(13) VALUE SPACES.
    05 TTY            PIC X(10) VALUE SPACES.
    05 FILL4          PIC X(13) VALUE SPACES.

上面的代码更新了我认为该表应该如何。该表必须在顶部有一个计数器,然后在它下面必须有一个出现的次数以及该表应该出现多少次。

我问的问题是你如何让上面的表实际上是一个表我不知道你必须创建一个Occurs,然后将所有内容放在发生的那个级别之下。

  01 mytable.
     02 counter...
     02 tablevar occures 200 times.
        05 var...
        05 var2..

我只是不确定Cobol表的结构。我的问题是Cobol数据结构的格式是什么?

2 个答案:

答案 0 :(得分:1)

你的桌子计数器需要一个PICture。

什么图片?意见各不相同。

有三种数字格式对此有用,二进制,压缩十进制和显示数字。

nn table-counter COMP/COMP-4/BINARY/COMP-5 PIC 9(4).
nn table-counter COMP-3/PACKED-DECIMAL PIC 9(3).
nn table-counter  PIC 9(3).

最有效的定义是二进制定义。如果使用packed-decimal,编译器将生成代码,以便在与用于下标的任何内容(文字除外)进行比较时将其转换为二进制。当使用display-numeric时,编译器将生成代码以首先转换为压缩十进制,然后转换为二进制。

这些日子这些东西对机器的速度有影响吗?好吧,如果它们无关紧要,也可能有效率,但意见确实有所不同。

PICture的尺寸是多少?对于二进制,9(4)允许最多9999作为最大值。你可以编码999,但它没有给你太多的优势(不能将它限制为300),所以我选择最适合的大小(对于压缩十进制(COMP-3)它将是999,因为你不什么都没得到第四位数字。如果使用display-numeric则相同。同样,意见各不相同。

如果这些是记录,正如Magoo指出的那样,你不能只将记数添加到记录的开头。你不能将你的桌子放在FILE SECTION和FD下面。它需要进入工作存储部分。

然后存在两个结构“在步骤中”相互匹配的问题。

您可能有记录布局的副本。最好的方法是,如果您可以对副本中的名称进行参数化,那么您可以在COPY语句中使用REPLACING,从而允许您将同一副本用于两个不同的目的。因此,副本不包含01级是很重要的。关于在抄写本中包含01的意见不一,但你可能会很幸运。

根据所有意见,我们会“好,我该怎么做?”。你做的是他们在你的网站上做的方式。应该有当地标准的文件。这可能无法涵盖所有​​内容,您可能需要征求同事的意见。如果您以相同的方式编写代码,则可以使代码更易于理解。

答案 1 :(得分:0)

就我个人而言,我将table-counter宣布为77级别的PIC 9(03)。你真的应该删除VALUE条款。当然,这需要是WORKING-STORAGE条目,而不是FD条目,因为表格不在文件中。除此之外,你的圆顶看起来是有效的 - 但很难看出你在问什么问题。