2009-04-30 10 views
0

J'ai ce fichier exporté d'un format bizarre (standard pour cette industrie!), Que j'ai besoin d'importer dans notre base de données . Le fichier ressemble fondamentalement ceci:Importer un fichier texte au format bizarre en C#

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 

Il y a 56 sections avec un total de 1963 lignes différentes, donc je ne suis vraiment pas en créer 56 cours avec 1963 propriétés ... Comment voulez-vous gérer ce fichier de sorte que vous pouvez accéder à certaines propriétés comme si elles étaient un objet?

Datrkaib.Kaib_Status_Fm 
Datrkarp.karp_St_Meld 

Répondre

1

À moins que votre langage de programmation ne vous permette d'ajouter des méthodes aux classes lors de l'exécution ou que les classes répondent aux appels à des méthodes non définies, vous ne pouvez pas le faire. Le fait est que même si C# vous laissait faire, vous perdriez la sécurité de type et l'aide Intellisense de toute façon (probablement parmi les raisons de vouloir que cela fonctionne), alors pourquoi ne pas le lire dans une structure de données? Mon inclinaison serait un hachage qui peut contenir des valeurs ou d'autres hash, donc vous devriez recevoir des appels comme (VB):

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

Ou si vous connaissez tous les éléments de données sont nommés de manière unique comme dans votre exemple, il suffit d'utiliser un hachage:

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

Vous pouvez revenir IntelliSense aide en créant un ENUM de tous les noms des éléments de données et obtenir:

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

J'ai oublié de mentionner que chaque section peut exister x fois .. Donc même Datrkakt ("Kaib") ("Status_Fm") me donnerait un dur temps. Pourtant, ce que je fais en ce moment est similaire à votre approche. Je vais probablement l'accepter comme la réponse si personne ne propose une approche plus facile. –

0

je partirais avec une liste <name, list> de divers objets, qui peut être un tuple <name, value> ou une liste nommée de l'objet.

1

Cela ressemble à des données structurées - je cours la recherche et le remplace et le convertis en un simple xml. puis importez.

Le si vous voulez générer un fichier de code hors de lui - considérer codesmith - Je pense qu'il peut le faire.

+0

Mon inclinaison est l'exact opposé. Les données sont déjà bien structurées. Pourquoi s'embêter avec une conversion? –

+1

Parce que la recherche et le remplacement est beaucoup plus simple que l'écriture d'un analyseur pour ce format, parce que dans. NET vous obtenez la lecture XML, les transformations et la sérialisation gratuitement. – OregonGhost

+1

Je ne sais vraiment pas pourquoi ils ne fournissent pas cette exportation en tant que xml aussi ... serait aussi simple. Le reparer en xml avant l'importation était vraiment ma première idée, mais j'ai réussi à l'oublier. Ai-je mentionné combien je déteste la spécification pour ce format? ... –

0

Il n'y a pas cela fera automatiquement pour vous.

Je voudrais créer une classe contenant toutes les propriétés appropriées (par exemple DatrDocument), et créer une classe DatrReader (idée similaire aux classes XmlDocument/XmlReader).

Le DatrReader devra lire le contenu du fichier ou du flux et l'analyser dans un DatrDocument.

Vous pouvez également écrire une classe DatrWriter qui prendra un DatrDocument et l'écrira dans un flux.

Questions connexes