此练习的目标是读取输入文件并将其存储到表中,然后验证输入中的某些字段并输出任何错误记录.我需要读取并存储每个策略组,以便一次只存储5个记录而不是整个文件.
所以我需要读取一个5个记录的策略组,进行处理,然后读取接下来的5个记录等,直到文件结束.
This is the input file.
10A 011111 2005062520060625
20A 011111000861038
32A 011111 79372
60A 0111112020 6 4
94A 011111 080 1
10A 02222 2005082520060825
20A 022221000187062
32A 022221 05038
60A 0222212003 6 4
94A 022221 090 1
....
Run Code Online (Sandbox Code Playgroud)
我能够将前5个记录加载到表中,让我的表发生了5次,但我不知道如何继续这样做.我的代码如下.(我写它只是为了看它是否正常工作,但是它打印的标题行包含前4个记录,而不仅仅是前5个)01 TABLES.
05 T1-RECORD-TABLE.
10 T1-ENTRY OCCURS 5 TIMES
INDEXED BY T1-INDEX.
15 RECORD-TYPE-10 PIC X(80).
15 RECORD-TYPE-20 PIC X(80).
15 RECORD-TYPE-32 PIC X(80).
15 RECORD-TYPE-60 PIC X(80).
15 RECORD-TYPE-94 PIC X(80).
copy trnrec10.
COPY TRNREC20.
COPY TRNREC32.
COPY TRNREC60.
COPY TRNREC94.
.....
Z200-READ-FILES.
READ DISK-IN INTO T1-ENTRY(T1-INDEX)
AT END MOVE 'YES' TO END-OF-FILE-SW.
WRITE PRINT-RECORD FROM T1-ENTRY(T1-INDEX).
Run Code Online (Sandbox Code Playgroud)
我不想一步一步为此(尽管那很好:P)bc我知道我需要做什么我只是不知道如何做到这一点我的教科书和课程笔记对我来说毫无用处.我已经坚持了一段时间,没有尝试过.
我假设每个策略组都有5条记录类型的5条记录.
您可以像这样设置工作存储空间.
05 T1-RECORD.
10 T1-RECORD-TYPE PIC XX.
10 FILLER PIC X(78).
COPY TRNREC10.
COPY TRNREC20.
COPY TRNREC32.
COPY TRNREC60.
COPY TRNREC94.
Run Code Online (Sandbox Code Playgroud)
然后你读的段落看起来像这样.我假设TRNREC10-RECORD是TRNREC10字帖的01级.如果没有,请替换以下代码中的实际01级别.
2200-READ-FILE.
READ DISK-IN INTO T1-RECORD
AT END MOVE 'YES' TO END-OF-FILE-SW.
IF END-OF-FILE-SW = 'NO'
IF T1-RECORD-TYPE = '10'
MOVE T1-RECORD TO TRNREC10-RECORD
END-IF
IF T1-RECORD-TYPE = '20'
MOVE T1-RECORD TO TRNREC20-RECORD
END-IF
...
END-IF.
Run Code Online (Sandbox Code Playgroud)
你写的段落看起来像这样
2400-WRITE-FILE.
WRITE PRINT-RECORD FROM TRNREC10-RECORD
WRITE PRINT-RECORD FROM TRNREC20-RECORD
...
Run Code Online (Sandbox Code Playgroud)
您的处理段落将访问副本记录中的数据.