构建多记录平面文件

时间:2017-07-31 10:02:32

标签: linq file sortedlist flat

我很难找到适合生成平面文件的解决方案。

以下是我需要注意的一些标准: 该文件有一个标题,其中包含以下记录的摘要 可能有多个Collection Header Records包含多个Batch Header Records,其中包含多个不同类型的记录。

批处理中的所有记录都有一个校验和,必须将其添加到批处理校验和中。这个必须添加到集合Header校验和,并再次添加到文件校验和。此外,文件中的每个条目都有一个计数器值。

所以我的计划是为每条记录创建一个类。但现在呢?我有记录和"简要记录",下一步是将它们全部按顺序排列,计算总和然后设置计数器。

如果我将所有内容放在一个大的SortedList中,我应该如何从这里开始?如果是这样,我如何知道添加最新记录的位置(必须将其添加到其代表批处理摘要中)?

我的第一个想法是做这样的事情:

SortedList<HeaderSummary, SortedList<BatchSummary, SortedList<string, object>>>();

但是很难浏览HeaderSummariesBatchSummaries以在内部排序列表中添加对象,请记住我可能需要创建并添加HeaderSummary / BachtSummary

有几个不同的ArrayLists,比如一个用于Header,一个用于Batch,另一个用于其余的,在将它们组合到一个平面文件时因为顺序和 - 但是设置 - 计数器,同时保持顺序等而给我带来了问题。 / p>

对于这样的平面文件,你有什么聪明的解决方案吗?

1 个答案:

答案 0 :(得分:0)

考虑使用类来表示树结构的级别。

interface iBatch {
    public int checksum { get; set; }
}

class BatchSummary {
    int batchChecksum;
    List<iBatch> records;

    public void WriteBatch() {
        WriteBatchHeader();
        foreach (var record in records)
            batch.WriteRecord();
    }

    public void Add(iBatch rec) {
        records.Add(rec); // or however you find the appropriate batch
    }
}

class CollectionSummary {
    int collectionChecksum;
    List<BatchSummary> batches;

    public void WriteCollection() {
        WriteCollectionHeader();
        foreach (var batch in batches)
            batch.WriteBatch();
    }

    public void Add(int WhichBatch, iBatch rec) {
        batches[whichBatch].Add(rec); // or however you find the appropriate batch
    }
}

class FileSummary {
    // ... file summary info
    int fileChecksum;
    List<CollectionSummary> collections;

    public void WriteFile() {
        WriteFileHeader();
        foreach (var collection in collections)
            collection.WriteCollection();
    }

    public void Add(int whichCollection, int WhichBatch, iBatch rec) {
        collections[whichCollection].Add(whichBatch, rec); // or however you find the appropriate collection
    }
}

当然,如果不一定更清楚,您可以使用常见的Summary类更干燥。