我被要求编写程序来处理 2个输入文件(客户和员工),匹配两个文件的键并生成以下 3个输出文件:< / p>
设置我的循环,以便它针对员工文件中的每条记录检查客户文件中的一条记录,然后从获取另一个密钥对值客户文件并启动该过程。
目前:
问题:有没有办法使用与我目前同时完成所有任务相同的读取段落,而无需为每个文件比较类型重新运行JCL
我发布的代码仅适用于匹配的案例
代码:(记录布局 - 这一切都有效)
01 MAIN-LINE1.
05 FILLER PIC X(03). <-- won't use in comparison
05 ID-1 PIC X(09).
05 FILLER PIC X(01).
05 KEY-1 PIC X(20).
05 FILLER PIC X(47).
01 MAIN-LINE2.
05 ID-2 PIC X(09).
05 FILLER PIC X(55).
05 KEY-2 PIC X(20).
05 FILLER PIC X(66).
阅读以下陈述。这是从一个Perform Match-Infile1中调用的......它确实有效。
以下代码适用于文件中的匹配情况。
MATCH-INFILE1.
READ INFILE1 INTO MAIN-LINE1
AT END
MOVE 'Y' TO EOF1
GO TO X-INFILE1
NOT AT END
PERFORM READ-INFILE2 THRU X-INFILE2 UNTIL EOF2 = 'Y'
END-READ.
X-INFILE1. EXIT.
READ-INFILE2.
READ INFILE2 INTO MAIN-LINE2
AT END
MOVE 'Y' TO EOF2
GO TO X-INFILE2
NOT AT END
PERFORM COMP-FILE THRU X-COMP-FILE <-- I did not include this because
I forgot to but can add it in in
the morning when I have access
to the mainframe. (simple compare)
END-READ.
X-INFILE2. EXIT.
记录布局
客户布局:
**107458982** ****FM00000000000713432****CH <-- discard the CH
员工布局: (丢弃SD两字节字段)
SD **331067113** **FFM00000000004556402**
答案 0 :(得分:2)
我认为用你当前的代码完成所有三项任务是不可能的。如果文件包含 1,000,000条记录,会发生什么情况。您将读取 1,000,000次的文件。 永远完成(假设硬盘存活)。
对于这种类型的处理,我建议进行排序合并过程:
按键顺序中2个文件的处理逻辑变为:
while not eof
evaluate true
when key-file1 < key-file2
Write file1-record to output-file-2
read file1
when key-file1 > key-file2
Write file2-record to output-file-3
read file2
when key-file1 = key-file2
/* match processing,
will involve reading at least one of the files */
move key-file1 to hold-key
while key-file1 = hold-key
Write Output-File-1
read file1
end
while key-file2 = hold-key
read file2
end
end
end
中将添加文件结尾逻辑
注意:从问题中不清楚应该如何处理同一个密钥的多个条目