Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Sauvegarde données en binaire [ Système / Fichier & Disque ] (freeman151248)

vendredi 8 février 2008 à 10:55:28 | Sauvegarde données en binaire

freeman151248

Bonjour,

je souhaite sauvegarder un nombre de données assez important, donc en binaire pour ne pas avoir de taille de fichier trop lourde. Mais je n'arrive pas a trouver la solution. J'ai déja sauvegardé des données en random mais la a priori ca ne marche pas. voici un peu mon projet .

J'ai créer 2 TYPE perso :
1. ce type contient des données que j'ai récupérer d'un fichier texte. les tableaux Spectrexxxx peuvent être de forme variable sur la 1ere dimension ex: spectredB(4096,2) ou spectredB(32,2) etc.....

Public Type FichierSortieIcare
    Configuration As String
    Comment As String
    NomFichier As String
    NombreDeFrequence As Double
    NomSource As String
    SourceComment As String
    CoorSourceX As String
    CoorSourceY As String
    CoorSourceZ As String
    NomRecepteur As String
    RecepteurComment As String
    NomPanneau As String
    CoorRecepX As String
    CoorRecepY As String
    CoorRecepZ As String
    SpectreRe() As Double
    SpectreIm() As Double
    SpectredB() As Double
End Type
2.Le deuxième est une sorte de base données contenant un nombre variable de données de type FichierSortieIcare.Transferts est un tableau 1 dimension.

Public Type BaseDeDonnee
    Nom As String
    Commentaire As String
    IsEmpty As Boolean
    NombreTransferts As Integer
    Transferts() As FichierSortieIcare
End Type
dim BDDProjet as BaseDeDonnee

Je souhaite donc sauvegarder BDDProjet dans un fichier. J'ai essayé avec RANDOM mais cela génére des erreurs, car si j'ai bien compris il faut des tailles fixes et je n'ai pas de taille fixe!

comment puis-je stocker ces données et les relire correctement? car si je stocke en texte je pense que pour un nombre de Transfert=729 (en moyenne le nombre de données d'un projet) j'aurai un fichier de 550Mo.

merci de votre aide ou conseil!


samedi 9 février 2008 à 01:13:11 | Re : Sauvegarde données en binaire

jack

Administrateur CodeS-SourceS

Salut
Plusieurs problèmes :
Taille des fichiers :
Que tu stockes en Random ou autre, les données prendront a peu près la même place.
Donc, la méthode n'y changera pas grand chose excepté pour les chiffres qui peuvent être stockés sur peu d'octets.
Pour gagner de la place, il va falloir passer par des algos de compression.

La méthode :
En effet, des variables typées avec des chaines String non délimitées (*) n'ont pas de taille fixe, donc non utilisables pour un accès direct par Random.
(*) String de taille fixe avec la définition    maChaine As String * 10  pour une chaine de 10 caractères.
Là, avec des chaines de longueur connue, l'accès Random est possible

La question est : As-tu besoin d'un accès Random ?
As-tu besoin de ces données au démarrage de ton application ou bien dois-tu les lire n'importe quand et pas toutes en même temps ?
Si tu dois les charger en une seule fois, tu peux te rabattre sur un fichier texte avec une donnée par ligne ou une ligne par variable typée en séparant les données par un caractère spécial, genre le  |
Je vois que ta structure comporte aussi des tableaux :
Là, ça complique tout puisqu'il faut, en plus de stocker les données, les rattacher à une autre structure.

Rien que pour cela, je te suggère fortement de te pencher sur les bases de données et de remplacer / alimenter tes variables typées par des questionnements de la DB (RecordSet)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)


samedi 9 février 2008 à 15:15:38 | Re : Sauvegarde données en binaire

freeman151248

salut jack,

merci pour ta réponse.
-j'étais parti sur un accés RANDOM mais effectivement, je n'en ai pas besoin car les données du fichier sont ttes appelées à l'ouverture de l'appli.
 
-En fait, je voulais utilisé uniquement cela pour que la structure en type personnalisé soit reconnue lors de la lecture du fichier.En effet, je pensais que la sauvegarde en RANDOM était la seule manière de garder en mémoire cette structure personnalisée mais en sauvegardant en BINARY, la structure est reconnue donc finalement mon problème est résolu.

-Je n'ai pas essayé de sauvegarder en ASCII mais j'ai 2 soucis :
1.J'ai peur que la taille du fichier soit énorme :
Par exemple 1 fichier lu et mis en données de TYPE FichiersortieICARE fait 732Ko or la taille moyenne de ses fichiers stockés en BDDProjet est de 1000 donc je pense qu'en multipliant les 2 j'ai a peu pres la taille globale de la BDDProjet soit 732Mo. Le binaire est intéressant car la plupart des données sont des DOUBLE.
2. Je ne pense pas que la lecture du fichier soit aussi facile:
  Pas de reconnaissance de TYPE perso?

-Sur tes conseils je vai zieuter du coté des algos de compression juste pour voir  pour la suite de mes aventures en VB.

-pour finir voila ce que je fais ds mon appli.
G un peu changé ma structure perso :
Public Type BaseDeDonnee
    Nom As String
    Commentaire As String
    IsEmpty As Boolean
    NombreTransferts As Integer
End Type
public Transferts() As FichierSortieIcare
public BDDProjet as BaseDeDonnee

pour la sauvegarde (en résumé) :
open FilePath for BINARY as  #Num
put #Num,,BDDProjet

for i=1 to BDDProjet.NombreTransferts

   put #Num,,Transferts(i)
next i

pour la lecture(en résumé) :
open FilePath for BINARY as  #Num
get #Num,,BDDProjet
redim Transferts(BDDProjet.NombreTransferts)

for i=1 to BDDProjet.NombreTransferts

   get #Num,,Transferts(i)
next i

Merci encore


vendredi 15 février 2008 à 09:34:44 | Re : Sauvegarde données en binaire

jack

Administrateur CodeS-SourceS

Salut
Non, tu ne peux pas utiliser cette technique d'écriture/lecture car Transferts n'a pas de taille fixe.
Pour que cela fonctionne, il faut impérativement dimensionner tes chaines en longueur fixe comme ceci :
   Nom As String * 32
A toi de voir quelle taille adopter, mais, côté taille de fichier, cela ne va pas aller dans le bon sens puisque tu vas être obligé de stocker les espaces de terminaison.

Je t'assure que l'utilisation d'une DB genre Access et d'une connexion ADODB depuis VB6 n'est pas insurmontable et résoudrait tes problèmes.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)


vendredi 15 février 2008 à 09:38:41 | Re : Sauvegarde données en binaire

jack

Administrateur CodeS-SourceS
Oups
J'ai confondu Transferts avec BaseDeDonnee, mais la reflexion reste la même : Tu ne pourras pas relire efficacement BaseDeDonnee en tête de ton fichier pour les raisons mensionnées. Idem pour les fiches FichierSortieIcare.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)



Cette discussion est classé dans : fichier, nombre, données, string, type


Répondre à ce message

Sujets en rapport avec ce message

Envoyer une ligne d'un fichier directement ds une structure (TYPE ...) [ par MacgyverJC ] j'avais une astuce en VB4:TYPE NPType Nom as string *10 Prenom as string *10END TYPETYPE LigneType Chaine as string *20END TYPE...NP probleme de type string number [ par Ricool ] Salut à tous,J'a un petit souci de type et je ne saisi comment le résoudre (etant nouveau dans le monde de la programmation)Pr faire passer un integer identification type de données [ par bins ] Bon,jour, Je récupere des donnees dans un fichier texte avec fgets et j'ai besoin de trier les entiers et les chaines de caractères pour des traiteme exportation de données xls vers un fichier texte [ par matheo54 ] Bonjour, J'essaye de réaliser une macro qui me permettrais d'exporter les données du feuille excel (classeur2.xls) à partir d'une macro se trouvant da ecriture des données dans un fichier à accès directe [ par PERLA62 ] Slt,en faite je suis entrain de faire une application de gestion des étudiants j'ai  un problème je voulais  que l'utilisateur fait la saisie des donn Données sous Word2000 [ par Janeo ] Bonjour, Après avoir parcouru les questions du forum, pas de réponse à ce qui suit : J'ai un fichier Word 2000 du type suivant : micro;computer;;komp visualisation de structures de données sur un fichier [ par hela_bouks ] Salut, la dernière fois ou j'ai posé mon problème, les réponses que j'ai reçues m'ont vraiment super aidées, c'est pour cela que je retente ma chance. Type de données "String" en VBA [ par mortalino ] Salut à tousPour mon instruction, quelle est la différence entre : Dim NimporteQuoi As String  &  Dim N Conversion string=> Nombre a virgule [ par pulpul74 ] Bonjour,Voici mon problème: Je lit un fichier texte qui contient des Valeurs à virgules, je les extraits donc dans un string. Pour effectuer des opéra string en integer et faire la somme [ par tonyock ] voila je veux transformer ma chaine de caractere en entier et faire la somme de ces valeurs j'ai essayer convert.toint  et autre fonction tjs le meme


Nos sponsors

Sondage...

CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.