[Probeme] Algorithmique et structure de données

Algorithmique et structure de données [Probeme] - Divers - Programmation

Marsh Posté le 10-05-2005 à 10:17:27    

Bonjour,
Je me pose un probleme sur une structure de données.
J'ai une application qui va parser un fichier de configuration. Ce fichier va en fait représenter une arborescence, c'est à dire qu'une ligne de ce fichier de configuration représentera un élément qui pourra être le père ou le fils d'un autre élément du fichier (une autre ligne). En fait la structure ressemble à un fichier XML dont les éléments seraient mélangés dans le fichier de configuration (je ne souhaite pas utiliser de fichier XML pour pouvoir ajouter un élément facilement sans avoir a ce taper un fichier XML à la main). Une ligne du fichier de config serait donc composée de l'élément lui meme et de son père direct pour le placer dans l'arbre.
Je souhaite donc charger mon fichier de configuration dans une structure arbre.
 
Mon probleme est que si mon fichier de config est long, comme les éléments ne sont pas ordonnés dans le fichier à chaque fois que je vais lire un nouvel élément dans le fichier, je vais etre obligé de parcourir tout les éléments déja présents dans l'arbre pour trouver son père et faire l'ajout au bon endroit. Ca va etre hyper couteux, non? mais la je ne vois pas d'autre solution pour remplir l'arbre ou quel autre structure utiliser (autre qu'un arbre) pour charger le fichier de config.
 
Vous en pensez quoi?
 
Je sais pas si j'ai été clair, si vous voulez des précisions, demandez moi.

Reply

Marsh Posté le 10-05-2005 à 10:17:27   

Reply

Marsh Posté le 10-05-2005 à 10:24:18    

Tu veut jouer uniquement sur le programme ou alors modifier la structure du fichier de config est envisageable ?

Reply

Marsh Posté le 10-05-2005 à 10:28:21    

0x90 a écrit :

Tu veut jouer uniquement sur le programme ou alors modifier la structure du fichier de config est envisageable ?


 
Les 2 sont envisageables, mais il me faut un fichier de config simple à éditer à la main donc XML  :non: malheureusement.

Reply

Marsh Posté le 10-05-2005 à 10:36:06    

Tu peut pas demander au replisseur de fichier de les mettre proprement , kkchose du genre :
[fixed]
papy = 12
.papa1 = 154
..fils11 = bleu
..fils12 = à la carotte
.papa2 = 157
.papa3 = par envie
..fils31 = Pi
...petitfils32 = arheu !
[code]
avec soit des points, soit des espaces, soit des tabs...
on répète pas le nom du parent, le fichier est visuel, mais c'est pas chiant à tapper comme de l'XML ( sauf qu'il faut mettre sous le bon parent évidement ).
ensuite au parsage, suffit d'avoir un compteur de points, si pareil qu'avant, c'est un nouveau fils du père en cours, si un point de plus, le père en cours devient le fils du père en cours, si un point de moins, on le père en cours devient le père du père en cours.

Reply

Marsh Posté le 10-05-2005 à 14:25:04    

AsTro a écrit :

Les 2 sont envisageables, mais il me faut un fichier de config simple à éditer à la main donc XML  :non: malheureusement.


 
<Config
StartMin=true
Scale=6
Xoff=20.5
DbgFile="c:\yop"
/>
 
c'est pas simple à éditer à la main ?

Reply

Marsh Posté le 10-05-2005 à 14:28:07    

0x90 a écrit :

Tu peut pas demander au replisseur de fichier de les mettre proprement , kkchose du genre :
[fixed]
papy = 12
.papa1 = 154
..fils11 = bleu
..fils12 = à la carotte
.papa2 = 157
.papa3 = par envie
..fils31 = Pi
...petitfils32 = arheu !
[code]
avec soit des points, soit des espaces, soit des tabs...
on répète pas le nom du parent, le fichier est visuel, mais c'est pas chiant à tapper comme de l'XML ( sauf qu'il faut mettre sous le bon parent évidement ).
ensuite au parsage, suffit d'avoir un compteur de points, si pareil qu'avant, c'est un nouveau fils du père en cours, si un point de plus, le père en cours devient le fils du père en cours, si un point de moins, on le père en cours devient le père du père en cours.


 
très franchement, trop de la merde.
 
je suis employé dans une boite à débugger du code codé avec les pieds où le modèle général de données est foutu dans des INI ...  et ça me fait chier.

Reply

Marsh Posté le 10-05-2005 à 14:31:23    

tu prends un truc comme TinyXml qui est un parseur Xml super tolérant, et tu peux écrire des trucs comme ça:
 
 

Citation :


<! Paramètres VideoConfig:
 
 adapter: numéro de l'adaptateur graphique à utiliser  
  adapter=1
   
 devtype: type d'interface (HAL: matérielle ou REF: renderer microsoft de référence)
  devtype=ref
 
 fullscreen_resolution: résolution plein écran
  fullscreen_resolution=1280x1024
   
 fullscreen_format: format backbuffer, on peut spécifier soit le nombre de bpp,  
      et le moteur choisira tout seul, soit la répartition des bits  
      par canal.      
  fullscreen_format=32  
  fullscreen_format=24
  fullscreen_format=16  
  fullscreen_format=10:10:10  
  fullscreen_format=8:8:8  
  fullscreen_format=5:6:5
  fullscreen_format=5:5:5
   
 fullscreen: démarrage plein écran (booléen)  
  fullscreen=true
   
 windowed_resolution: résolution en mode fenêtré
  windowed_resolution=800x600
   
 multisample: niveau d'anti-aliasing (de 2 à 16)
  multisample=6
   
 dither: tramage, utile en mode 16bpp (booléen)
  dither=true  
   
 aspectratio: rapport d'aspect du moniteur
  aspectratio=1.33
  aspectratio=4:3
  aspectratio=16:9
/>
 
<VideoConfig adapter=0 fullscreen_resolution=1024x768 fullscreen=false fullscreen_format=32 windowed_resolution=800x600 />
 
<! Maximum quality: mixrate=48000 mixer=fpu>
<! Compatilibity Mode: output=waveOut>
<AudioConfig />
 
<DynamicEnvCube enable=true size=512 period=0.1 format=8:8:8 mask=-1 />
 
<EntityList file="scene\entities.xml" />
 
<PlanetList file="scene\planets.xml" />
 
<Camera pos="0,0,150"/>
 
<!Camera pos="200100,0,150" />
 
<Sounds
spawn="sounds\spawn.wav"
copy="sounds\shlick_copy.wav"
delete="sounds\shlick.wav"
/>
 


 

Citation :


<Entity model="models/Naboo_fighter.BML" pos="100,0,0" />
 
<Entity model="models/SkyLab.BML" pos="0,100,0">
        <Sound file="Sounds\machine1.wav"  
                inner_angle="60°"
                inner_volume="1"
                outer_angle="100°"
                outer_volume="0.3"
                cone_vector="0,0,1"  
        />
 
        <Entity model="models/Blimp.BML" pos="0,0,-50" />
</Entity>
 


Message édité par bjone le 10-05-2005 à 14:38:53
Reply

Marsh Posté le 10-05-2005 à 15:47:45    

bjone a écrit :

très franchement, trop de la merde.
 
je suis employé dans une boite à débugger du code codé avec les pieds où le modèle général de données est foutu dans des INI ...  et ça me fait chier.


 
C'était une idée ( effectivement, c'est supermauche à regarder comme ca ^^ ), y'a je sais plus quel fichier de config de je sais plus quel soft (libre) qui prends en compte l'indentation, avec des points c'est ignoble en fait, ca ressemble à rien.
 
Par contre, si au lieu de monter ton arbre en mémoire de manière anarchique tu utilise un bel arbre trié au fur et à mesure ( à toi de choisir dans la diversité d'arbres existants ), tu dois pouvoir réduire de bcp bcp le temps de scannage du fichier de config.
 
Sinon je sais pas à quoi ressemblent les données de ton fichier de config, ( selon si elles peuvent être "infinie" ou pas, si elles utilisent un set prédéfinit de clef parentes, .... ) Mais tu dois pouvoir faire kkchose à base de Hash pour retrouver rapidement ce que tu veut non ? ( plus d'infos sur le contenu du fichier de config ca aiderait à vrai dire )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed