我很难找到适合生成平面文件的解决方案。
以下是我需要注意的一些标准: 该文件有一个标题,其中包含以下记录的摘要 可能有多个Collection Header Records包含多个Batch Header Records,其中包含多个不同类型的记录。
批处理中的所有记录都有一个校验和,必须将其添加到批处理校验和中。这个必须添加到集合Header校验和,并再次添加到文件校验和。此外,文件中的每个条目都有一个计数器值。
所以我的计划是为每条记录创建一个类。但现在呢?我有记录和"简要记录",下一步是将它们全部按顺序排列,计算总和然后设置计数器。
如果我将所有内容放在一个大的SortedList中,我应该如何从这里开始?如果是这样,我如何知道添加最新记录的位置(必须将其添加到其代表批处理摘要中)?
我的第一个想法是做这样的事情:
SortedList<HeaderSummary, SortedList<BatchSummary, SortedList<string, object>>>();
但是很难浏览HeaderSummaries
和BatchSummaries
以在内部排序列表中添加对象,请记住我可能需要创建并添加HeaderSummary / BachtSummary
。
有几个不同的ArrayLists,比如一个用于Header,一个用于Batch,另一个用于其余的,在将它们组合到一个平面文件时因为顺序和 - 但是设置 - 计数器,同时保持顺序等而给我带来了问题。 / p>
对于这样的平面文件,你有什么聪明的解决方案吗?
答案 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类更干燥。