如何将非标准化文件加载到标准化表。我是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?
我肯定会像你一样,两人一组阅读。对我来说,这比用"旗帜"来说明发生了什么更清楚
我怀疑你在没有意识到的情况下用第二张唱片改写了你的第一张唱片
对于初学者来说,一个简单的方法是使用READ ... INTO ...
来获得两种不同的布局。随着经验的丰富,您可能会保存第一条记录中所需的数据,只需使用FD区域中的第二条记录。
这里有一些伪代码。它和你的一样,只是使用了"Priming Read"。这一次启动读取正在读取两条记录。没问题。
通过测试所示的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
因为文件的结构非常简单,任何一个都可以。对于固定数量的记录组,我会选择每次读取一组。有了更复杂的结构,第二,"横向"。
无论哪种方法都能清楚地反映文件的结构,当你在程序中这样做时,你都有助于人类读者(将来可能是你)对程序的理解。