Каков наилучший способ создания плоских файлов из шаблонов и их анализа - PullRequest
4 голосов
/ 12 августа 2011

Вот проблема, которую я имею, мне нужно сгенерировать файл плоской строки с довольно сложной (навязанной) структурой, основанной на длине поля и положениях начала и конца. Этот файл будет сгенерирован из приложения .Net (данные хранятся в SQL Server). У него разные заголовки с разными шаблонами. Структура может также измениться со временем. Файл того же типа также нужно будет проанализировать обратно в мою систему.

Я бы хотел создать шаблон, который определяет внешний вид файла, например, со следующим атрибутом: Имя, Тип, Длина поля, Начальная и конечная позиция, Значение по умолчанию.

И иметь возможность сгенерировать файл из какого-либо вида данных, а затем проанализировать его из того же шаблона.

Я почти уверен, что у меня не первая такая проблема, но я не могу найти хорошую библиотеку в Интернете. Я посмотрел на StringTemplate, но, похоже, он не может создавать шаблоны на основе длины и положения данных.

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

Ваша проблема очень распространена в мире корпоративных приложений. Вы можете попробовать разработать свою собственную библиотеку или выбрать SW, который выполняет всю работу. Существует множество примеров такого рода приложений, обычно Enterprise Service Bus (ESB) полезны для передачи данных: ESB предлагает множество дескрипторов данных для всех типов источников данных, в том числе файлов фиксированной длины.

Вот та же ссылка open souce sw, которую вы можете включить в свое решение:

1 голос
/ 20 сентября 2011

Я не знаю об общем компоненте, который имеет дело с этим.Но я бы написал общий инструмент, который на основе определения шаблона использует отражение для заполнения свойств в объекте.

Ваш «шаблон» должен был бы определить структуру файла, как вы уже описали, и полнуюимя класса, в который вы хотите загрузить данные (и, возможно, сборку, содержащую класс, если это может измениться).

Основной поток будет выглядеть следующим образом:

  • Проверить заголовок на правильность (необязательно)
  • Выполнить цикл по строкам данных
    • Создать новый экземпляр целиclass (используйте Assembly.GetType() and Type.GetConstructor () `)
    • Цикл по полям
      • Анализ значения в соответствии с их типом
      • Установите значение свойства с тем жеимя (используя Type.GetProperty() и PropertyInfo.SetValue())
    • Добавить объект в коллекцию результатов.
  • Готово

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

Записать файл можно почти так же, используя отражение для получения значений вашего объекта просмотра.

1 голос
/ 13 августа 2011

У вас, вероятно, есть веская причина не использовать стандартную сериализацию в XML или JSON. Посмотрите, поможет ли T4 Templating Engine или StringTemplate .

РЕДАКТИРОВАТЬ: Может быть, вам следует переоценить свой подход, а не искать «шаблонизацию», так как кажется, что это только для поколения и не поддерживает фиксированную длину. Было бы справедливо сказать, что вам нужна сериализация и десериализация из пользовательского формата? Если формат проприетарный, вам придется написать собственный код сериализации, который будет включать все правила, такие как фиксированная длина и т. Д.

...