2011-01-07 4 views
0

J'ai besoin d'importer un fichier ASCII avec un format de fichier personnalisé.Importer le format ascii personnalisé à partir du fichier

Certaines données sont stockées dans des blocs, avec un bloc de début et un bloc de fin. Les autres données sont stockées sans délimiteurs de bloc.

Un exemple est:
$ Fiche
S posx posy dimx dimy
Liste des feuilles d'étiquettes
$ EndSheet

Une autre est:
texte Notes posx posy orientation dimension ~
Texte

Maintenant, quelle serait la meilleure façon d'importer ces données dans un type de structure?

Cordialement
Jakob Justesen

+5

Votre but est un peu clair - pouvez-vous définir le mieux? Si vous n'avez que deux formats de fichier et que vous avez juste besoin d'un outil unique pour l'obtenir, générique pourrait ne pas être un second objectif utile. –

+0

Vous n'avez pas vraiment fourni suffisamment d'informations pour une réponse significative. –

+0

J'ai écrit un certain nombre de lecteurs de fichiers pour les formats de fichiers que je n'ai pas créés (essayez-vous d'importer un fichier créé par une autre application dont vous n'avez pas le code source?). Vous devez connaître les délimiteurs des données, si les champs sont facultatifs, etc. Sans cette connaissance, vous ne pouvez pas définir l'analyseur. – Tony

Répondre

1

Vous allez avoir besoin de lire une ligne: si elle est un début de bloc main puis à une large méthode qui gère un bloc de lecture. Si ce n'est pas le cas, passez à une méthode qui traitera une lecture non bloquée. La méthode la plus "générique" consiste à utiliser une méthode usine qui vous renvoie la classe Reader requise. Certains pseudo-code pourrait ressembler à ceci:

Open [File] 
while not EOF 
    Read [Line] 
    var [Reader] = ReaderFactory.GetReader([Line]) 
    var [Record] = [Reader].Read([File]) 
    Do what you want with record 
wend 
Close [File] 

Comment vous représentez les différents types d'enregistrement je laisse comme un exercice pour vous :)

+0

Merci! Cela ressemble à quelque chose que je pourrais utiliser. Bonne idée avec le ReaderFactory. – JakobJ

Questions connexes