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

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

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

надо разобрать текстовый файл с структурированными разношерстными данными (с вложенносятми и т.д.) Сделал модели под каждый возможный тип данных Sheet Component Parameter Text Designator и т.д. десятка полтора. У каждого куча свойств (имена у части свойств совпадают) Оформил все в виде фабричного метода. Сам тектовый файл разбит на строки, одна строка одна запись. Спарсил ее, получил список словарей, где каждый атрибут строки разбит на ключ:значение. Вопрос, как праивльно организовать из данных в парсере, полноценную модель данных. Точнее где организховать заполнение моделей данными.
public static class DataReadSchService
{
        private static List<LinePars> _ascii;
}
ну и вот прмиерная реализация LinePars
public class LinePars
{
    public Dictionary<string, string> Properties;
 
    public LinePars()
    {
        Properties = new Dictionary<string, string>();
    }
 
    public void AddProp(string name, string value)
    {
        var nameUp = name.ToUpper();
 
        if (Properties.ContainsKey(nameUp))
        {
            Properties[nameUp] = value;
        }
        else
        {
            Properties.Add(nameUp, value);
        }
    }
 
    public bool Check(string prop)
    {
        return Properties.ContainsKey(prop);
    }
 
    public string Get(string prop)
    {
        return Equals(Properties[prop],"*") ? string.Empty : Properties[prop];
    }
 
    public int GetInt(string prop)
    {
        return Convert.ToInt32(Properties[prop]);
    }
 
    public Boolean GetBool(string prop)
    {
        return Equals(Properties[prop],"TRUE");
    }
}
ну и допустим, перебираю я в цикле все "строки"
if (_ascii.Count == 0) return;
if (!_ascii.First().Check("WEIGHT")) return;
var weight = _ascii.First().GetInt("WEIGHT"); //заголовок
 
 _sheet = (Sheet)_store.PrepareObject(_ascii[1]);
 
for (int i = 2; i < weight; i++)
{
    var tempObj = _store.PrepareObject(_ascii[i]);
 
    if (tempObj != null)
    {
        _sheet.Add(tempObj);
    }
}
Где и как с архитектурной точки зрения, правильно будет заполнять свойства tempObj остальными данными из _ascii ? имена свойств у разных объектов совпадают, а вот их перечень - разный. Плюс некоторые объекты (за графическую часть отвчающие) являются дочерними (тут исопльзую компановщик).

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

textual
Листинг программы
    [DataContract]
    [KnownType(typeof(Ellipse ))]
    [KnownType(typeof(Line))]
    [KnownType(typeof(Component))]
    public abstract class CompObject
    {
        [DataMember]
        public Record Record { get; set; }
    }

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


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

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

5   голосов , оценка 3.8 из 5
Похожие ответы