如何将去规范化文件加载到规范化表。我是cobol的新手,对以下要求有任何建议。谢谢。
入站文件:FileA.DAT
ABC01
ABC2014/01/01
FDE987
FDE2012/01/06
DEE6759
DEE2014/12/12
QQQ444
QQQ2004/10/12
RRR678
RRR2001/09/01
表:TypeDB
TY_CD Varchar(03)
SEQ_NUM CHAR(10)
END_DT DATE
我必须编写一个COBOL程序来加载表:TypeDB 结果的输出应为
TY_CD SEQ_NUM END_DT
ABC 01 2014/01/01
FDE 987 2012/01/06
DEE 6759 2014/12/12
QQQ 444 2004/10/12
RRR 678 2001/09/01
以下是伪代码
Perform Until F1 IS EOF
Read F1
MOVE F1-REC to WH1-REC
Read F1
MOVE F1-REC to WH2-REC
IF WH1-TY-CD = WH2-TY-CD
move WH1-TY-CD to TY-CD
move WH1-CD to SEQ_NUM
move WH2-DT to END-DT
END-IF
END-PERFORM
这不起作用..更好的事情是什么?而是在执行中读取2?
答案 0 :(得分:0)
我绝对会像你一样成对阅读。对我来说,比拥有"标志"更清楚。说出发生了什么。
我怀疑你在没有意识到的情况下用第二条记录覆盖了你的第一张唱片。
对于初学者来说,一个简单的方法就是使用READ ... INTO ...
来获得两种不同的布局。随着您变得更有经验,您可能会从第一条记录中保存所需的数据,并且只使用FD区域中的第二条记录。
这里有一些伪代码。它与您的相同,但使用"启动读取"。这次启动读取正在读取两条记录。没问题。
通过测试指示的FILE STATUS字段,验证文件的配对结构。检查密钥可以确保密钥对始终是相同的"密钥"同样。所有内置和隐藏远离您的实际逻辑(在这种情况下,无论如何都不是很多)。
PrimingRead
FileLoop Until EOF
ProcessPair
ReadData
EndFileLoop
ProcessPair
Do the processing from Layout1 and Layout2
PrimingRead
ReadData
Crash with non-zero file-status
ReadData
ReadRec1
ReadRec2
If Rec2-key not equal to Rec1-key, crash
ReadRec1
Read Into Layout1
Crash with non-zero file-status
ReadRec2
Read Into Layout2
Crash with file-status other than zero or 10
虽然我们在这里,但我们也可以从Valdis Grinbergs应用此解决方案(参见https://stackoverflow.com/a/28744236/1927206)。
PrimingRead
FileLoop Until EOF
ProcessPair
ReadPairStructure
EndFileLoop
ProcessPair
Do the processing from Layout1 and Layout2
PrimingRead
ReadPairStructure
Crash with non-zero file-status
ReadPairStructure
ReadRec1
ReadSecondOfPair
ReadSecondOfPair
ReadRec2
If Rec2-key not equal to Rec1-key, crash
ReadRec1
Read Into Layout1
Crash with non-zero file-status
ReadRec2
Read Into Layout2
Crash with file-status other than zero or 10
因为文件的结构非常简单,所以可以做到。对于固定数量的记录组,我一次去读取一组。有一个更复杂的结构,第二个,"横向"。
这两种方法都清楚地反映了文件的结构,当你在程序中这样做时,你有助于理解人类读者的程序(可能是你将来的某个时间)。