Bonjour,

Dans un de mes projets de programme, j'aurais besoin de sauvegarder des variables pour pouvoir les recharger plus tard.
Avec peu de variables et un format de fichier "définitif", ça ne me pose pas de problème. On ouvre un fichier en mode binaire, on envoie les variables dans le fichier en faisant une suite de "Put #1, ,MaVariable" et on les récupère avec "Get". Bref, c'est simple.


Mon souci est que je souhaite stocker un plus grand nombre de variables et surtout mettre en place un format de fichier capable de migrer sans avoir besoin de créer des routines de migration.

Pour le premier point, je peux utiliser des variables de type utilisateur pour la lisibilité.mais ça entre en conflit le besoin de flexibilité.

Pour le second, j'avais pensé que le fichier pourrait commencer par un petit en-tête avec un identifiant et une version de fichier. A la suite de ça, je mettrait des enregistrement avec :
- un identifiant (un integer par exemple)
- la longueur en octet pour sauter l'enregistrement si on tente de lire avec une version plus ancienne du logiciel (en mode lecture seule).
- les données binaire de la variable, tableau ....


Je m'imagine déjà avec un code de 3 kilomètres de long avec un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Do
   Get #1, , Var_identifiant
   Get #1, , Var_LongueurEnregistrement
 
   Select case Var_identifiant
        Case 1
              Get #1, , Var_Tableau1
        Case 2
              Get #1, , Var_Chaine1
       Case xxx
               [...]
       Case else
             'faire un saut, fonction "seek" ?
   End select
Loop
Et cela en quasi doublon (sauvegarde/ouverture).

Est-ce qu'il y aurait une méthode plus factorisée et qui pourrait être réutilisé aussi bien pour la lecture que pour l'écriture. Du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Do
   Get #1, , Var_identifiant
   Get #1, , Var_LongueurEnregistrement
 
   Get #1, , Fonction_ou_Objet_Simulant_une_Variable( Var_identifiant )
Loop
J'en suis resté à du code BASIC donc très "procédurale". Je n'ai pas exploré certaines possibilités du type classes, objets ...

Merci