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



本练习的目标是读取输入文件并将其存储到表中,然后验证输入中的某些字段并输出任何错误记录。需要存储的输入文件是 285 条记录。问题是每条记录都是不同的,都有自己的副本,所以我不知道如何将其加载到一个表中,我可以在其中搜索每个 10、20 或 32 条记录的某个字段。这是输入文件的示例,仅供参考...不确定此时是否需要我当前的代码,因为除了 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 中的邮政编码是否为数字?

我知道我可以读到抄本,但我不知道如何,或者如果可能的话,将一个文件读成多个文册,然后将其全部存储在一个表格中......如果这有意义的话。

任何关于从这里去哪里的建议将不胜感激!

几个问题

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

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

  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
    

宁愿

  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

回顾你之前展示的一本文案,上面有一个 01。这可以为您的任务安排一些事情。没关系。

将所有记录存储在表中后,您可以按顺序查看每个项目,只注意每个条目的前两个字节,按记录类型标识条目并将条目移动到该记录类型的相应 01。使用副本名称进行所有验证/报告。

如果没有副本上的 01,您可以在表条目的重新定义中使用副本,只需使用适当的副本,方法与上述方法相同,而无需执行 MOVE。

有一种"更高级"的方法可以做到这一点,但它可能会与你目前正在学习的内容相吻合。记下自己,几个月后问问,什么时候你对 COBOL 更放心。

你的任务只是一个练习。您不太可能将这样的文件存储在这样的表中。这是为了让你习惯文件处理和表处理。

文件处理和表处理是非常普遍的事情,所以通过实践来擅长它们。尝试先阅读课程笔记和手册。然后是导师/同事。你会发现学习比来这里寻找答案更容易。如果您确实遇到困难,当然欢迎您询问,但请先卡住:-)

相关内容

  • 没有找到相关文章

最新更新