質問
この奇妙な(この業界の標準!)形式のエクスポートファイルがあります。 データベース。ファイルは基本的に次のようになります。
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
合計で1963の異なる行を含む56のセクションがあるので、私は本当に 1963個のプロパティを持つ56個のクラスを作成しています...このファイルをどのように処理しますか オブジェクトのようにいくつかのプロパティにアクセスできるようにしますか?
Datrkaib.Kaib_Status_Fm
Datrkarp.karp_St_Meld
解決
プログラミング言語で実行時にクラスにメソッドを追加したり、クラスを未定義のメソッドへの呼び出しに応答させたりしない限り、これを行う方法はありません。問題は、C#でこれができたとしても、タイプセーフティが失われ、Intellisenseの助けが(とにかくそのように動作することを望んでいる理由の1つです)です。私の傾向は、値または他のハッシュを含むことができるハッシュになるため、(VB)のような呼び出しを取得します:
Datrkakt("Lkz")
Datrkakt("Dat_Stam")
Datrkakt("Kaib")("Az")
Datrkakt("Kaib")("Status_Fm")
または、例のようにすべてのデータ項目に一意の名前が付けられていることがわかっている場合は、1つのハッシュを使用します。
Datr("Kakt_Lkz")
Datr("Kakt_Dat_Stam")
Datr("Kaib_Az")
Datr("Kaib_Status_Fm")
すべてのデータ項目名の列挙を作成し、次のものを取得することにより、Intellisenseヘルプを取得できます。
Datr(DatrItem.KAKT_LKZ)
Datr(DatrIrem.KAIB_STATUS_FM)
他のヒント
構造化されたデータのように見えます-検索を実行し、それを単純なxmlに置き換えて変換します。インポートします。
コードファイルを生成する場合- codesmith を検討してください。これを行う。
さまざまなオブジェクトのリスト<name, list>
を使用します。これは、タプル<name, value>
またはオブジェクトの名前付きリストです。
これを自動的に行うことはありません。
すべての適切なプロパティを含むクラス(たとえば、DatrDocument)を作成し、DatrReaderクラスを作成します(XmlDocument / XmlReaderクラスと同様のアイデア)。
DatrReaderは、ファイルまたはストリームのコンテンツを読み取り、解析してDatrDocumentにする必要があります。
DatrDocumentを取得してストリームに書き込むDatrWriterクラスを作成することもできます。