本练习的目标是读取输入文件并将其存储到表中,然后验证输入中的某些字段并输出任何错误记录。需要存储的输入文件是 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 中的邮政编码是否为数字?
我知道我可以读到抄本,但我不知道如何,或者如果可能的话,将一个文件读成多个文册,然后将其全部存储在一个表格中......如果这有意义的话。
任何关于从这里去哪里的建议将不胜感激!
几个问题
- 为什么必须将值移动到表中,而不是在读取文件时执行测试???.
- 作业是否明确指出您必须在执行任何测试之前将每条记录读入表中???或者您只需要将所有相关记录存储在表中,并在其中一个记录有错误时将它们全部打印出来???.最好在表中尽可能少地存储。
如果您需要将整个文件存储在表中,基本上您可以
- 将文件读入表
- 将副本包含在工作存储中
-
如果要测试表条目,请检查记录类型并将表条目移动到相应的副本中。
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
我宁愿
- 仅将相关记录存储在表中 在读入值时
- 测试这些值(或存储以在读入完整记录组时进行检查)。
在这种情况下,可以使用如下所示的逻辑
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 更放心。
你的任务只是一个练习。您不太可能将这样的文件存储在这样的表中。这是为了让你习惯文件处理和表处理。
文件处理和表处理是非常普遍的事情,所以通过实践来擅长它们。尝试先阅读课程笔记和手册。然后是导师/同事。你会发现学习比来这里寻找答案更容易。如果您确实遇到困难,当然欢迎您询问,但请先卡住:-)