将非规范化文件转换为规范化表的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?

我肯定会像你一样,两人一组阅读。对我来说,这比用"旗帜"来说明发生了什么更清楚

我怀疑你在没有意识到的情况下用第二张唱片改写了你的第一张唱片

对于初学者来说,一个简单的方法是使用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

因为文件的结构非常简单,任何一个都可以。对于固定数量的记录组,我会选择每次读取一组。有了更复杂的结构,第二,"横向"。

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

最新更新