Pregunta

Tengo este archivo exportado de un formato extraño (¡estándar para esta industria!), que necesito importar nuestra base de datos El archivo básicamente se ve así:

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

Hay 56 secciones con un total de 1963 filas diferentes, por lo que realmente no estoy en creando 56 clases con propiedades de 1963 ... ¿Cómo manejarías este archivo? para que pueda acceder a alguna propiedad como si fuera un objeto?

Datrkaib.Kaib_Status_Fm
Datrkarp.karp_St_Meld
¿Fue útil?

Solución

A menos que su lenguaje de programación le permita agregar métodos a las clases en tiempo de ejecución o que las clases respondan a llamadas a métodos indefinidos, no hay forma de que pueda hacer esto. La cuestión es que, incluso si C # le permitiera hacer esto, perdería la seguridad de los tipos y la ayuda de Intellisense de todos modos (presumiblemente entre las razones por las que desea que funcione así), entonces, ¿por qué no seguir adelante y leerlo en alguna estructura de datos? Mi inclinación sería un hash que puede contener valores u otros hash, por lo que recibiría llamadas como (VB):

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

O si sabe que todos los elementos de datos tienen un nombre exclusivo como en su ejemplo, simplemente use un hash:

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

Puede recuperar la ayuda de Intellisense creando una enumeración de todos los nombres de elementos de datos y obteniendo:

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

Otros consejos

Parece datos estructurados: ejecutaría la búsqueda, la reemplazaría y la convertiría en un simple xml. y luego importar.

Si desea generar un archivo de código a partir de él, considere codesmith - Creo que puede hacer esto.

Iría con una Lista <name, list> de varios objetos, que puede ser una tupla <name, value> o una lista de objetos con nombre.

No hay nada que haga esto automáticamente por usted.

Crearía una clase que contenga todas las propiedades apropiadas (por ejemplo, DatrDocument), y crearía una clase DatrReader (idea similar a las clases XmlDocument / XmlReader).

El DatrReader deberá leer el contenido del archivo o la secuencia y analizarlo en un DatrDocument.

También es posible que desee escribir una clase DatrWriter que tomará un DatrDocument y lo escribirá en una secuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top