Разбор текстовых файлов. Архитектура - C#

Узнай цену своей работы

Формулировка задачи:

надо разобрать текстовый файл с структурированными разношерстными данными (с вложенносятми и т.д.) Сделал модели под каждый возможный тип данных Sheet Component Parameter Text Designator и т.д. десятка полтора. У каждого куча свойств (имена у части свойств совпадают) Оформил все в виде фабричного метода. Сам тектовый файл разбит на строки, одна строка одна запись. Спарсил ее, получил список словарей, где каждый атрибут строки разбит на ключ:значение. Вопрос, как праивльно организовать из данных в парсере, полноценную модель данных. Точнее где организховать заполнение моделей данными.
Листинг программы
  1. public static class DataReadSchService
  2. {
  3. private static List<LinePars> _ascii;
  4. }
ну и вот прмиерная реализация LinePars
Листинг программы
  1. public class LinePars
  2. {
  3. public Dictionary<string, string> Properties;
  4. public LinePars()
  5. {
  6. Properties = new Dictionary<string, string>();
  7. }
  8. public void AddProp(string name, string value)
  9. {
  10. var nameUp = name.ToUpper();
  11. if (Properties.ContainsKey(nameUp))
  12. {
  13. Properties[nameUp] = value;
  14. }
  15. else
  16. {
  17. Properties.Add(nameUp, value);
  18. }
  19. }
  20. public bool Check(string prop)
  21. {
  22. return Properties.ContainsKey(prop);
  23. }
  24. public string Get(string prop)
  25. {
  26. return Equals(Properties[prop],"*") ? string.Empty : Properties[prop];
  27. }
  28. public int GetInt(string prop)
  29. {
  30. return Convert.ToInt32(Properties[prop]);
  31. }
  32. public Boolean GetBool(string prop)
  33. {
  34. return Equals(Properties[prop],"TRUE");
  35. }
  36. }
ну и допустим, перебираю я в цикле все "строки"
Листинг программы
  1. if (_ascii.Count == 0) return;
  2. if (!_ascii.First().Check("WEIGHT")) return;
  3. var weight = _ascii.First().GetInt("WEIGHT"); //заголовок
  4. _sheet = (Sheet)_store.PrepareObject(_ascii[1]);
  5. for (int i = 2; i < weight; i++)
  6. {
  7. var tempObj = _store.PrepareObject(_ascii[i]);
  8. if (tempObj != null)
  9. {
  10. _sheet.Add(tempObj);
  11. }
  12. }
Где и как с архитектурной точки зрения, правильно будет заполнять свойства tempObj остальными данными из _ascii ? имена свойств у разных объектов совпадают, а вот их перечень - разный. Плюс некоторые объекты (за графическую часть отвчающие) являются дочерними (тут исопльзую компановщик).

Решение задачи: «Разбор текстовых файлов. Архитектура»

textual
Листинг программы
  1.     [DataContract]
  2.     [KnownType(typeof(Ellipse ))]
  3.     [KnownType(typeof(Line))]
  4.     [KnownType(typeof(Component))]
  5.     public abstract class CompObject
  6.     {
  7.         [DataMember]
  8.         public Record Record { get; set; }
  9.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы