Импорт текстового файла со странным форматом в C # - PullRequest
0 голосов
/ 30 апреля 2009

У меня есть этот экспортированный файл в каком-то странном (стандартном для этой отрасли!) Формате, который мне нужно импортировать в наша база данных. Файл в основном выглядит так:

DATRKAKT-START
  KAKT_LKZ  "D"
  KAKT_DAT_STAMM    "1042665"

  DATRKAIB-START
    KAIB_AZ "18831025"
    KAIB_STATUS_FM  2
    KAIB_KZ_WAE "E"
  DATRKAIB-END

  DATRKARP-START
    KARP_MELD   "831025"
    KARP_ST_MELD    "G"
  DATRKARP-END

...
DATRKAKT-END

Есть 56 разделов с 1963 различными строками, так что я действительно не в создание 56 классов с 1963 свойствами ... Как бы вы справились с этим файлом чтобы вы могли получить доступ к какому-либо объекту, как к объекту?

Datrkaib.Kaib_Status_Fm
Datrkarp.karp_St_Meld

Ответы [ 4 ]

1 голос
/ 30 апреля 2009

Если ваш язык программирования не позволяет добавлять методы к классам во время выполнения или позволяет классам отвечать на вызовы неопределенных методов, вы не сможете это сделать. Дело в том, что даже если бы C # позволил вам это сделать, вы в любом случае потеряли бы безопасность типов и помощь Intellisense (предположительно, в числе причин, по которым она так должна работать), так почему бы не пойти дальше и не прочитать это в какой-то структуре данных? Я склоняюсь к хешу, который может содержать значения или другие хеши, поэтому вы получите вызовы типа (VB):

Datrkakt("Lkz")
Datrkakt("Dat_Stam")
Datrkakt("Kaib")("Az")
Datrkakt("Kaib")("Status_Fm")

Или, если вы знаете, что все элементы данных имеют уникальные имена, как в вашем примере, просто используйте один хеш:

Datr("Kakt_Lkz")
Datr("Kakt_Dat_Stam")
Datr("Kaib_Az")
Datr("Kaib_Status_Fm")

Вы можете получить справку Intellisense, создав перечисление всех имен элементов данных и получив:

Datr(DatrItem.KAKT_LKZ)
Datr(DatrIrem.KAIB_STATUS_FM)
1 голос
/ 30 апреля 2009

Это похоже на структурированные данные - я запускаю поиск и замену и конвертирую их в простой XML. а затем импортировать.

Если вы хотите сгенерировать файл кода из него - рассмотрите codesmith - Я думаю, что он может сделать это.

0 голосов
/ 30 апреля 2009

Нет, это автоматически сделает это за вас.

Я бы создал класс, содержащий все соответствующие свойства (скажем, DatrDocument), и создал бы класс DatrReader (идея, аналогичная классам XmlDocument / XmlReader).

DatrReader должен будет прочитать содержимое файла или потока и проанализировать его в DatrDocument.

Вы также можете написать класс DatrWriter, который возьмет DatrDocument и запишет его в поток.

0 голосов
/ 30 апреля 2009

Я бы пошел со списком <name, list> различных объектов, который может быть кортежем <name, value> или именованным списком объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...