具有多种记录类型的COBOL存储文件

时间:2013-11-12 22:15:21

标签: store cobol copybook

本练习的目标是读取输入文件并将其存储到表中,然后验证输入中的某些字段并输出任何错误记录。需要存储的输入文件是285条记录。问题是每个记录都是不同的,有自己的副本,所以我不知道如何将它加载到一个表格,我可以搜索某个字段的每个10,20或32记录。这是输入文件FYI的示例...不确定此时是否需要我当前的代码,因为除了READ语句之外没有太多内容。

10A 018517          2005062520060625                                    
20A 018517000861038                                                     
32A 018517                            79372                             
60A 0185172020                                             6          4 
94A 018517     080 1                                                    
10A 027721          2005082520060825                                    
20A 027721000187062                                                     
32A 027721                            05038                             
60A 0277212003                                             6          4 
94A 027721     090 1                                                    
....

我能够将文件加载到表中,但现在我的困境是如何搜索表中的每个不同记录字段来验证?即如何验证记录32中的邮政编码是否为数字?

我知道我可以读到这本字帖,但我不知道如何,或者如果它甚至可能,将文件读入多个副本,然后将它们全部存储在一个表中......如果这是有道理的。

非常感谢任何有关从何处出发的建议!

2 个答案:

答案 0 :(得分:2)

回顾你之前展示的一本字帖,它上面有一张01。这可以为你的任务卷入事物。没关系。

一旦您将所有记录存储在表中,您可以按顺序查看每个项目,只关注每个条目的前两个字节,通过记录类型识别条目并将条目移动到相应的01表示该记录类型。使用copybook-names进行所有验证/报告。

如果没有副本上的01,你可以在表条目的REDEFINES中使用副本,只需使用适当的副本,方法与上面相同,而无需进行MOVE。

有一种“更先进”的方法可以做到这一点,但它可能会与您目前正在学习的内容相关联。在几个月的时间里,当你对COBOL更加放松时,请记下自己的问题。

你所拥有的任务只是一项练习。您不可能在这样的表中存储类似的文件。这是让你习惯文件处理和表处理。

文件处理和表格处理是很常见的事情,所以通过练习来擅长。首先尝试完成课程笔记和手册。然后是导师/同事。你会发现学习比仅仅来这里寻找答案更容易。如果你遇到困难,你当然可以问,但请先卡住: - )

答案 1 :(得分:2)

几个问题

  1. 为什么在读取文件???时必须将值移动到表而不是执行测试。
  2. 分配具体是否表明您必须在执行任何测试之前将每条记录读入表中?或者你只需​​要将所有相关记录存储在一个表中,如果其中一个有错误,则将它们全部打印出来。最好尽可能少地存储在表格中。

  3. 如果您需要将整个文件存储在表格中,基本上可以

    1. 将文件读入表格
    2. 在工作存储中包含副本
    3. 如果要测试表条目,请检查记录类型并将表条目移动到相应的副本。

        01  File-Records.
            03 filler occurs 285.
               05 Table-Entry                   Pic X(80).
               05 Filler redefines Table-Entry  Pic XX.
                  88 Record-Type-10  value "10".
                     ....
                  88 Record-Type-94  value "94".
      
      
      
        Evaluate true
          when Record-Type-10(table-index)
             Move Table-Entry(table-index)    to Copybook-10
               ...Whatever processing is needed...
               ...
          when Record-Type-94(table-index)
             Move Table-Entry(table-index)    to Copybook-94
             ....
        end-evaluate
      

    4. 更喜欢

      1. 仅将相关记录存储在表格中
      2. 在读取值时测试值(或存储以便在读入完整记录组时进行检查)。
      3. 在这种情况下可以使用如下逻辑

             Evaluate true
                when Record-Type-10
                  if group-in-error
                     ...write all the table-entries  to the Error-File...
                  end-if
                  set group-in-error-off      to true
                  move 1                      to table-index
                  ... Record-Type-10 tests ...
        
               when group-in-error          
                  continue
        
               when Record-Type-20
                  ... Record-Type-20 tests ...
            end-Evaluate
            move Intput-record                to Table-entry(table-index)
            Add 1                             to table-index