Voilà, j'ai un problème de parseur que meme mon prof de stage ne donne pas une solution propre. Je vous confie pour ce problème.
Je veux lire un fichier contenant des lignes comme suite par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
aardvark,1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1
chub,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4
clam,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,7
crab,0,0,1,0,0,1,1,0,0,0,0,0,4,0,0,0,7
crayfish,0,0,1,0,0,1,1,0,0,0,0,0,6,0,0,0,7
dans laquelle c'est une suite des attributs de différente type. Chaque ligne contient le meme nombre d'attribut et que chaque attribut a un domaine. Par exemple :
-le premier attribut est un string, et le domaine de cet attribut est [aardvark,chub,clam,crab,crayfish] ---> le nom d'animaux
-le 5em attribut de droite à gauche est un attribut numérique et son domaine est [2,4,6,8]----> les pattes d'un animal
-le dernier est un attribut numérique et son domaine est {1..7} pour décrire la famille de l'animal.
-pour les autres attributs, ce sont des valeurs booléens pour décrire une caractère de l'animal ( avoir du poil ou non, par exemple)
Donc vous pouvez comprendre que chaque ligne est la description d'un animal.
Alors, mon parseur doit lire le fichier et construire un tableau de 2 dimensions dont la largeur est le nombre total des valeurs d'attribut et le longeur est le nbr de lignes.
Mon problème est de remplir la largeur. J'explique explicitement sur ''le nbr total des valeurs d'attributs". Je veux représenter les valeurs numériques et les strings (ou éventuellement les chars) par une suite des 0 et 1. Pour les booléens, c'est une suite 01 ou 10.
Par exemple:
Dans la premiere ligne de mon exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
aardvark,1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1
: on aura
+10000 représente la valeur du premier attribut car cet attribut a un domaine de 5 valeurs et ''aardvark" est à la position 1 dans le domaine.
+0100 représente la valeur du 5eme attribut de droite à gauche car cet attribut a un domaine de 4 valeurs et "4'' est la deuxième valeur dans le domaine.
On calcule pas le dernier attribut( plutot je peux m'en occuper cet attribut).

Plus généralement, je représente chaque valeur i de l'attribut par un booléen, ce booleen vaut 1 si l'attribut a la valeur i, 0 sinon. Et ca doit etre valide pour n'importe quel type (numérique, string, char).
Donc pour résumer, je veux bien qu`à partir de la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
aardvark,1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1
je veux avoir une ligne correspondant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
10000 01 10 10 01 10 10 01 01 01 01 10 10 0100 10 10 01 (dernier attribut non traité)
Quelqu'un a une idée pour faire ce parseur spécial?
Mon prof a proposé une solution de 2 étapes :
1. on lit le fichier pour collecter les domaines des attributs.
2. remplir le tableau à la fin.

Mais ce qui me gene est qu'il y a de différentes types dans une lignes, et je ne sais pas une structure de données spéciale de C++permettant stocker des différentes types..

J'attends vos idées génies.
Merci