Traitement sur des fichiers

Fermé
ghostman - 25 juin 2018 à 14:10
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 juin 2018 à 20:46
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:

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 25 juin 2018 à 19:22
Salut ghostman,

Tu peux l'enregistrer en binaire avec fwrite (plus rapide, mais peu portable), ou en texte en sérialisant avec fprintf (plus lent, mais plus portable).

Que tu choisisses l'un ou l'autre, si tu dois préserver un ordre de stockage, tu devras probablement réécrire la totalité.

Dal
0
findwisdom Messages postés 3 Date d'inscription lundi 25 juin 2018 Statut Membre Dernière intervention 26 juin 2018
26 juin 2018 à 09:05
Donc Selon vous a chaque fois il me faudra récupérer mes données du fichier les traiter puis les réécrire dans le fichier ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 26 juin 2018 à 10:16
Oui, à moins que tu ajoutes seulement des données sur le disque (fopen en mode "append").

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
fichier.ext
de :

- charger le contenu de
fichier.ext
en mémoire
- faire les changements en mémoire
- créer un
fichier.ext.new
avec toutes les données
- supprimer
fichier.ext
une fois que le nouveau a été créé avec succès
- renommer
fichier.ext.new
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 :-)
0
findwisdom Messages postés 3 Date d'inscription lundi 25 juin 2018 Statut Membre Dernière intervention 26 juin 2018
26 juin 2018 à 13:21
Bonjour Dal .Merci dejas pour les premières réponses .Si un tableau de Structure semble moins efficace que me conseiller vous ? J'ai vu en classe qu'avec l'utilisation d'indexes cela pouvais faciliter la modification des données seulement je ne comprends pas ce concept d'indexe !!!! Pendant que j'y suis j'ai un mini projet du coup après la conception du MCD et du MLD en Merise je me demande comment les matérialiser dans mon programme mes différentes entités pourquoi ? Parce que il s’avère que dans mon programme j'ai besoin d'imbriquer des structures dans d'autres structures ce qui est traduit par une relation dans le MLD(modèle logique de donnée ) avec votre expérience pouvez vous m’éclairer sur comment faire ?
'
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 26 juin 2018 à 15:10
j'ai besoin d'imbriquer des structures dans d'autres structures

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)
0
findwisdom Messages postés 3 Date d'inscription lundi 25 juin 2018 Statut Membre Dernière intervention 26 juin 2018
26 juin 2018 à 16:43
Vraiment Merci beaucoup pour tous ces éclaircissements .Maintenant Je vous explique clairement le problème j'ai finis mon Model conceptuel de données et mon model logique de donnée j'ai 4 entités opérations, comptes qui contient les 4 dernières opérations , clients qui possède un seul compte et agences qui possèdent des comptes voila pourquoi j'avais envisager des struct pour ces différentes entités et un tableau de struct pour la mémorisation des comptes et des clients.Maintenant j'ai 4 fichier un fichier agence ,comptes ,opérations,clients et je dois agir sur ces fichiers les mettre a jour .Comment Procéderiez vous ?
0