Создание файла с несколькими записями
Я изо всех сил пытаюсь найти правильное решение для создания плоского файла.
Вот несколько критериев, о которых мне нужно позаботиться: файл имеет заголовок с кратким изложением его следующих записей, может быть несколько записей заголовка коллекции с несколькими записями заголовка пакета, которые содержат несколько записей разных типов.
Все записи в Пакете имеют контрольную сумму, которая должна быть добавлена к контрольной сумме Пакета. Этот должен быть добавлен к контрольной сумме заголовка коллекции, а затем снова к контрольной сумме файла. Также каждая запись в файле имеет значение счетчика.
Поэтому я планировал создать класс для каждой записи. а что сейчас? У меня есть записи и "сводные записи", следующим шагом будет привести их все в порядок, подсчитать суммы и затем установить счетчики.
Как мне поступить отсюда, поместить все в большой 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, чтобы сделать его более СУХИМЫМ, если не обязательно более ясным.