Traitement sur des fichiers
ghostman
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, Je voudrais avoir une explication sur comment enregistrer un tableau de structures dans un fichier puis de pouvoir mettre a jour les informations du fichier lors de l'ajout d’éventuelles informations dans le fichier en respectant quelques fois un ordre bien précis.?
A voir également:
- Traitement sur des fichiers
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Traitement de texte gratuit - Guide
- Wetransfer gratuit fichiers lourd - Guide
Si tu insères des données et que tu dois les stocker dans un certain ordre, comme tu sembles le dire, il est très difficile de faire autrement que de réécrire tout le fichier. En mode texte ce n'est pas envisageable, en mode binaire éventuellement, avec un fopen en mode "rb+", en se déplaçant au bon endroit avec fseek et en réécrivant à partir de l'endroit où les données sont insérées,... mais ce sont beaucoup de complications... et on ne procède comme cela que si on veut seulement patcher un fichier en remplaçant un ou quelques octets par d'autres.
C'est plus simple, pour mettre à jour un de :
- charger le contenu de en mémoire
- faire les changements en mémoire
- créer un avec toutes les données
- supprimer une fois que le nouveau a été créé avec succès
- renommer en fichier.ext
Sur un autre sujet, si tu as beaucoup d'insertions à faire, un tableau de struct n'est pas très efficace comme structure de données, mais c'est toi qui vois :-)
'
Tu peux imbriquer des struct dans d'autres struct et sizeof te retournera, pour la struct de base, la taille de l'ensemble. La taille du tableau sera cette taille x le nombre d'éléments, et si tu as l'adresse du tableau, tu peux facilement tout sauvegarder d'un coup en binaire avec fwrite car toute la mémoire utilisée est contenue dedans (avec les problèmes de portabilité déjà signalés).
Si, par contre, les struct contiennent des pointeurs sur struct (ou des pointeurs sur autre chose, d'ailleurs), sauvegarder en binaire le tableau de struct contenant ces pointeurs n'a pas trop de sens. Tu peux utiliser une bibliothèque de sérialisation, ou créer tes propres fonctions.
Si un tableau de Structure semble moins efficace que me conseiller vous ?
Je parlais des insertions. Pour insérer un élément dans un tableau trié, il faut décaler tous les autres éléments à partir de la position d'insertion. Pour effectuer une insertion dans une liste chaînée, ou, mieux, dans un arbre, il suffit de modifier quelques pointeurs.
https://fr.wikipedia.org/wiki/Arbre_B
J'ai vu en classe qu'avec l'utilisation d'indexes cela pouvais faciliter la modification des données
Si tu parles d'index dans une base de données, c'est un moyen d'accéder rapidement aux données d'une table, en maintenant une liste facile à interroger (par exemple triée, hashée,...) d'un champ fréquemment recherché faisant référence à la clef primaire.
Lis ceci : https://fr.wikipedia.org/wiki/Index_(base_de_donn%C3%A9es)