Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une structure à mettre dans un fichier

euh rapidement c'est possible ?

Sujet résolu
Anonyme
    18 mars 2006 à 19:11:41

    Bonsoir tous le monde :)

    Alors voilà, j'ai une structure à faire entrer dans un fichier (enfin l'écrire dans le fichier), mais j'aimerais savoir s'il étais possible de faire rentrer les 29 donnée dans le fichier directement plutôt que de faire une ligne de 500000 caractères en notant chaque donnée une à une...

    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2006 à 19:19:50

      J'ai pas tout compris , là ? o_O
      • Partager sur Facebook
      • Partager sur Twitter
        18 mars 2006 à 19:22:41

        Si ta structure ne contient pas de pointeur :
        fwrite (&tastruct,sizeof tastruct,file);

        fwrite copie un nombre d'octetsa partir d'une adresse sur un flux binaire

        fread fait exactement le contraire :)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 mars 2006 à 19:23:52

          Bah je suis en train de faire un petit jeu en mode console pour m'entraîner, et j'en susi à la sauvegarde, donc j'aimerais enregistrer tous ce que contient la structure Caracteritique, mais y'a 29 variable dedans, donc ma ligne de sauvegarde fait exactement 610 caractères.... Donc moi j'aimerais savoir s'il était possible d'enregistrer directement la structure dans le fichier (au lieu d'y aller variable par variable).

          EDIT: je test fwrite :p
          • Partager sur Facebook
          • Partager sur Twitter
            18 mars 2006 à 19:34:45

            Ah ! , j'ai compris :p

            Je connais pas de fonction pour faire ça ;

            P.S. [Délire] Paresseux ! , Paresseux ! ,Paresseux ! :p [/Délire]

            Une fois que tu as fais ta foncion , c'est fait ; et si c'est pour t'entraîner alors tu ferais mieux de tapez tes 610
            [ EDIT caractères ] :p


            A++ ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              18 mars 2006 à 19:37:04

              (Pas 610 lignes mais caractères :p ) et je les aient déjà taper en plus lol ^^ (mais j'avais vu quelque part que c'était pas bon de faire de trop longue ligne).

              Sinon fwrite sa marche pas ... (donc j'ai garder mes 610 caractères et la sa marche presque :lol: )

              EDIT: D'ailleurs je me demande pourquoi sa marche pas... sa me met des erreurs du genre: [Warning] overflow in implicit constant conversion

              ENCORE EDIT: Apriori j'avais initialiser un peut trop à la porcs ma structure ^^
              • Partager sur Facebook
              • Partager sur Twitter
                18 mars 2006 à 20:24:11

                Euh je crois que tu peux ouvrir un fichier en binaire et faire un fwrite dedans non?
                fwrite(&struct_sauvegarde, sizeof(struct_sauvegarde), fichier);
                Enfin je crois
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mars 2006 à 20:26:45

                  Oui, mais il faut pas qu'il y aie de pointeurs dans ta struct : il copierait les adresses des variables (et pas leur valeur, logique c'est des pointeurs que tu as), et donc tu ne pourrais plus retrouver les donner en rallumant ton PC (vu que les adresses mémoire en qustion auront été libérées depuis longtemps).

                  La seule solution, c'est d'écrire une solution qui fait ça, à la main.

                  http://c-faq.com/struct/io.html (et ouais ;) )
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mars 2006 à 20:27:03

                    Donne un petit aperçu de la déclaration de ta structure stp, sinon je rejoints asmanur : utilise un fichier binaire, ça sera plus simple.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 mars 2006 à 12:50:13

                      Sinon utilise
                      fprintf(fichier,"%d \n %ld \n...", structure.var1 ,structure.var2 ....)


                      avec ce code tu écrit toute les données dans le fichier mais le seul probleme c'est que la fonction va faire 3km de longtemps vu le nombre de variable dans ta structure. Ou alors c'est que ton code est pas optimisé au maximun pour que tu est autant de variable. mais bon je peux pas dire grand chose sans le code
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        19 mars 2006 à 14:16:44

                        Bah ma structure à exactement le nombre de variable nécessaire (j'en ai même viré une), sinon, je n'est plus de problème pour sa en utilisant fprintf (sa fait 610 caractères mais bon ...), par contre, j'ai un gros problème d'initialisation de structure, ma fonction "main" exploite la structure "Caracteristique" que j'initialise donc au début, mais pas de chance, cette structure est utilisé dans "français", et le problème, quand à partir de "français" je revient à "main" bah sa réinitialise la structure... (enfin pas exactement, en faite tous revient à zéro sauf le pseudo du joueur.... donc du coup sa sert à rien de sauvegarder des 0...).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 mars 2006 à 9:33:02

                          Citation : the_fear

                          Bah ma structure à exactement le nombre de variable nécessaire (j'en ai même viré une), sinon, je n'est plus de problème pour sa en utilisant fprintf (sa fait 610 caractères mais bon ...), par contre, j'ai un gros problème d'initialisation de structure, ma fonction "main" exploite la structure "Caracteristique" que j'initialise donc au début, mais pas de chance, cette structure est utilisé dans "français", et le problème, quand à partir de "français" je revient à "main" bah sa réinitialise la structure... (enfin pas exactement, en faite tous revient à zéro sauf le pseudo du joueur.... donc du coup sa sert à rien de sauvegarder des 0...).


                          On a un peu du mal à suivre sans voir ton code...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                          Anonyme
                            20 mars 2006 à 9:54:31

                            Bah le problème c'est que le code est très gros... Y'a le fichier main.c qui fait dans les 130 lignes, la fonction si on choisit la civilisation française qui fait dans les 800 lignes, y'a le fichier des prototypes, le fichier des structures, le fichier des fonction basiques comme générer un nombre au pif....
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 mars 2006 à 10:04:41

                              A mon avis tu es mal organisé. Ne balance pas tout le code, mais la déclaration de la structure que tu voudrais enregistrer.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                20 mars 2006 à 10:15:47

                                Bah voilà donc la partie du fichier main.c concerné :

                                while(menu != 0)
                                {
                                   switch(menu)
                                   {
                                      case 1:                   
                                         //la il y a du blabla (je l'enlève car le message veut po s'envoyer car trop grand...)         
                                         initialiserJoueur(&joueur);         
                                         francais(joueur);
                                                     
                                         system("CLS");                                               
                                         printf("Bienvenue dans World of War ! \n\n");
                                         printf("Que desirez vous faire ?\n");
                                         printf("1- Creer une partie \n");
                                         printf("2- Charger une partie \n");
                                         printf("3- Sauvegarder la partie \n");
                                         printf("4- Quitter World of War \n");
                                         scanf("%ld", &menu);                                                       
                                         break;

                                Donc la fonction pour initialiser la structure c'est "initialiserJoueur" qui est donc éxécuté juste avant que la partie ne soit lancé (euh la il n'y a qu'un choix de civilisation mais normalement il y en a plusieurs).
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 mars 2006 à 10:19:06

                                  Donne ta structure joueur !
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    20 mars 2006 à 10:20:52

                                    ok :) (enfin c'est Caracteristique la structure)


                                    typedef struct Caracteristique Caracteristique;
                                    struct Caracteristique
                                    {
                                       char nom[100]
                                       long argentTour, mineraiTour, orTour, armeTour, argent, chevaux, epee, armure, arc;
                                       long caserne, ecurie, archerie, muraille, tourDefense, chateau, defense, forge, mineOr, fonderieOr, monnayeur;
                                       long fantassins, archer, chevalier, fantassinsPossible, archerPossible, chevalierPossible;
                                       };
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 mars 2006 à 10:41:15

                                      Citation : the_fear

                                      ok :) (enfin c'est Caracteristique la structure)


                                      typedef struct Caracteristique Caracteristique;
                                      struct Caracteristique
                                      {
                                         char nom[100]
                                         long argentTour, mineraiTour, orTour, armeTour, argent, chevaux, epee, armure, arc;
                                         long caserne, ecurie, archerie, muraille, tourDefense, chateau, defense, forge, mineOr, fonderieOr, monnayeur;
                                         long fantassins, archer, chevalier, fantassinsPossible, archerPossible, chevalierPossible;
                                         };

                                      OK. La structure est linéaire (pas de pointeurs). Pour une utilisation simple (mêmes conditions à l'enregistrement et à la lecture), tu peux utiliser fwrite() / fread() :

                                      enregistrement


                                      on suppose que la structure a été correctemnt initialisée.
                                      • Ouverture du ficher de sauvegarde en ecriture binaire : fopen() avec "wb"
                                      • Ecriture de la structure avec fwrite()
                                      • Fermeture du fichier avec fclose()

                                      chargement


                                      on a défini une instance de la structure.
                                      • Ouverture du ficher de sauvegarde en lecture binaire : fopen() avec "rb"
                                      • Lecture de la structure avec fread()
                                      • Fermeture du fichier avec fclose()

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Music only !
                                      Anonyme
                                        20 mars 2006 à 10:53:57

                                        Euh c'est normale que se soit faut sa : (euh j'ai jamais utilisé fwrite aussi...)


                                        fwrite(&joueur, sizeof(joueur), fichier);


                                        Au momment de la compilation, sa me dit qu'il y a trop peut d'argument et qu'il y a des pointeurs (enfin sa dit sa sur les pointeurs : "[Warning] passing arg 3 of `fwrite' makes integer from pointer without a cast"
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mars 2006 à 10:54:58


                                          fwrite(&joueur, sizeof(joueur), 1, fichier);


                                          Il manquait le troisième argument (nombre de blocs à ecrire)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            20 mars 2006 à 10:57:03

                                            Euh bah sa sauvegarde, mais est ce normale que quand j'ouvre le fichier sauvegardé, ce soit écrit comme sa : <citation nom="Pas de titre">x Õ'ô 0$= = ý" $ = Hþ" Uöw&amp;amp;amp;amp;amp;amp;lt;ÿ $÷wøTöwÿÿÿÿ</citation> EDIT: euh désolé pour la présentation, mais apriori la citation de ce texte zarbi fait planté les sauts de lignes et le cadre blanc de citation ^^ (sans la citation sa marche lol)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 mars 2006 à 11:13:06

                                              Oui, puisque tu écris en binaire !
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                20 mars 2006 à 11:15:09

                                                Merci tous le monde :) J'ai réussit à résoudre mon problème pour l'initialisation (euh en faite c'est que je suis un aburit car j'avais mit des fonction de type void donc du coup sa fesait pas grand chose ...), encore merci de m'avoir aidé :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 mars 2006 à 14:36:35

                                                  Citation : the_fear

                                                  Euh bah sa sauvegarde, mais est ce normale que quand j'ouvre le fichier sauvegardé, ce soit écrit comme sa :


                                                  Un éditeur, c'est fait pour voir/modifier un fichier texte, pas un fichier binaire.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Music only !
                                                  Anonyme
                                                    20 mars 2006 à 15:07:40

                                                    Oui m'en suis rendu compte un peut plus tard ^^ (d'ailleurs sa existe pas un éditeur de binaire ??).
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      20 mars 2006 à 15:10:02

                                                      Citation : the_fear

                                                      Oui m'en suis rendu compte un peut plus tard ^^ (d'ailleurs sa existe pas un éditeur de binaire ??).


                                                      Certains éditeurs de textes ont cette fonction. UltraEdit, par exemple.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Music only !

                                                      Une structure à mettre dans un fichier

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown