Pergunta

Eu tenho esse arquivo exportado de algum estranho (padrão para esta indústria!) Formato, que eu preciso de importação para nossa base de dados. O arquivo basicamente se parece com isso:

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

Há 56 seções com um total de 1963 linhas diferentes, por isso não estou realmente em criação de 56 aulas com 1963 propriedades ... Como você lidaria com esse arquivo de modo que você pode acessar alguma propriedade como se fosse um objeto?

Datrkaib.Kaib_Status_Fm
Datrkarp.karp_St_Meld
Foi útil?

Solução

A menos que sua linguagem de programação permite que você adicione métodos a classes em tempo de execução ou permite que classes de responder às chamadas para métodos indefinidos, não há nenhuma maneira você pode fazer isso. A coisa é, mesmo que C # deixou você fizer isso, você perderia a segurança de tipos e Intellisense ajuda de qualquer maneira (presumivelmente entre as razões para querer que o trabalho assim), então porque não basta ir em frente e lê-lo em alguma estrutura de dados? Minha inclinação seria um hash que pode conter valores ou outros hashes, assim que você receber chamadas como (VB):

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

Ou se você conhece todos os itens de dados são nomeados exclusivamente como no seu exemplo, basta usar um hash de:

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

Você pode voltar Intellisense ajuda através da criação de uma enumeração de todos os nomes de itens de dados e obter:

Datr(DatrItem.KAKT_LKZ)
Datr(DatrIrem.KAIB_STATUS_FM)

Outras dicas

Parece que dados estruturados - eu correria pesquisa e substituição e convertê-lo a um simples xml. e depois de importação.

A se você deseja gerar um arquivo de código fora dela - considerar CodeSmith - Eu acho que pode faça isso.

Eu iria com um <name, list> lista de vários objeto, que pode ser um <name, value> tupla ou uma lista com o nome de objeto.

Não é que irá automaticamente fazer isso por você.

Gostaria de criar uma classe que contém todas as propriedades adequadas (dizem DatrDocument), e criar uma classe DatrReader (ideia semelhante aos XmlDocument / XmlReader classes).

O DatrReader precisará ler o conteúdo do arquivo ou fluxo, e analisá-lo em um DatrDocument.

Você também pode querer escrever uma classe DatrWriter que terá um DatrDocument e gravá-lo em um córrego.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top