Создание файла с несколькими записями

Я изо всех сил пытаюсь найти правильное решение для создания плоского файла.

Вот несколько критериев, о которых мне нужно позаботиться: файл имеет заголовок с кратким изложением его следующих записей, может быть несколько записей заголовка коллекции с несколькими записями заголовка пакета, которые содержат несколько записей разных типов.

Все записи в Пакете имеют контрольную сумму, которая должна быть добавлена ​​к контрольной сумме Пакета. Этот должен быть добавлен к контрольной сумме заголовка коллекции, а затем снова к контрольной сумме файла. Также каждая запись в файле имеет значение счетчика.

Поэтому я планировал создать класс для каждой записи. а что сейчас? У меня есть записи и "сводные записи", следующим шагом будет привести их все в порядок, подсчитать суммы и затем установить счетчики.

Как мне поступить отсюда, поместить все в большой SortedList? Если да, как я могу узнать, где добавить последнюю запись (она должна быть добавлена ​​в сводную информацию о пакете)?

Моей первой идеей было сделать что-то вроде этого:

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

Но трудно перемещаться по HeaderSummaries а также BatchSummaries добавить объект во внутренний отсортированный список, имея в виду, что мне, возможно, придется создать и добавить HeaderSummary / BachtSummary,

Наличие нескольких разных списков ArrayList, таких как один для заголовка, один для пакета и один для остальных, создает проблемы при объединении их в плоский файл из-за порядка и счетчиков, которые еще предстоит установить, при сохранении порядка и т. Д.

У вас есть какое-нибудь умное решение для такого плоского файла?

1 ответ

Подумайте об использовании классов для представления уровней вашей древовидной структуры.

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, чтобы сделать его более СУХИМЫМ, если не обязательно более ясным.

Другие вопросы по тегам