用于将规范化文件转换为规范化表的COBOL逻辑

时间:2015-03-02 16:37:31

标签: logic cobol

如何将去规范化文件加载到规范化表。我是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?

1 个答案:

答案 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

因为文件的结构非常简单,所以可以做到。对于固定数量的记录组,我一次去读取一组。有一个更复杂的结构,第二个,"横向"。

这两种方法都清楚地反映了文件的结构,当你在程序中这样做时,你有助于理解人类读者的程序(可能是你将来的某个时间)。