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
[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
A voir également:
- Traitement sur des fichiers
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Fichiers bin - Guide
- Fichiers epub - Guide
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
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
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
26 juin 2018 à 09:05
Modifié le 26 juin 2018 à 10:16
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 :-)
26 juin 2018 à 13:21
'
Modifié le 26 juin 2018 à 15:10
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)
26 juin 2018 à 16:43