Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecrire grâce à fprintf et faire un espace dans le fichier texte

pour mon éditeur

Sujet résolu
    2 juillet 2007 à 9:05:46

    Bonjour,
    J'ai cré il n'y a pas très longtemps un éditeur de terrain pour un jeu 2d. J'en ai cré 2 différents, un pour découper mon terrain en carrés et placer des carrés de terre,de sable, d'eau et encore d'autres choses. Dans mon deuxième éditeur, je ne souhaite pas découper mon terain en carrés, je souhaite mettre n'importe où mes bâtiments et arbres. J'ai créé une fonction sauvegarder niveau qui enregistre dans un fichier texte appelé posbatiments.lvl les positions de mes bâtiments . Mais en sauvegardant le terrain que je venais de faire, je me suis aperçu que tous les chiffres étaient allignés, il n'y a pas d'espace. J'aimerais donc savoir comment créer un espace et dire à mon éditeur que quand il arrive à un espace, il arrête la lecture du fichier et enregistre ce qu'il a lu dans une variable.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      2 juillet 2007 à 9:27:45

      Salut,

      ya un tuto sur ça : http://www.siteduzero.com/tuto-3-18613-1-lecture-et-ecriture-dans-les-fichiers.html

      PS : c'est pour en c++, donc pas avec fprintf

      Xav57
      • Partager sur Facebook
      • Partager sur Twitter
        2 juillet 2007 à 13:13:10

        Merci pour ton tuto,
        mais je voudrais savoir comment lire la ligne du fichier et de contenir le nombre de la ligne dans une variable Rect. J'en ai besoin pour déterminer l'endroit où mon objet ( un seul pas niveau) doit être blitté. J'ai réussi grâce au tuto à faire la fonction sauvegarder ni veau mais pas charger niveau: ma tentative:

        int chargerNiveau(SDL_Rect poscentrepoke)
        {
                    ifstream fichier;
                fichier.open("centrepoke.pos", ios::in);

                if(fichier)
                {

                        string contenu;
                        getline(fichier, contenu);
                        poscentrepoke.x = contenu;


                }

                fichier.close();

            }


        mais on me marque sur la ligne où je mets poscentrepoke.x = contenu; :
        error: cannot convert 'std::string ' to 'Sint16' in assignement 

        Merci de m'aider
        • Partager sur Facebook
        • Partager sur Twitter
          2 juillet 2007 à 13:19:24

          J'ai un peu arrangé ta fonction :
          int chargerNiveau(SDL_Rect poscentrepoke)
          {
                  ifstream fichier;
                  fichier.open("centrepoke.pos");

                  if(fichier)
                  fichier >> poscentrepoke.x

                  fichier.close();

                  return 1;

          }
          • Partager sur Facebook
          • Partager sur Twitter
            2 juillet 2007 à 13:28:07

            Je ne souhaite lire qu'une seule ligne pour pouvoir attribuer la seconde à poscentrepoke.y,au fait il est faux ton code, ma correction:
            int chargerNiveau(SDL_Rect poscentrepoke)
            {
                    ifstream fichier;
                    fichier.open("centrepoke.pos");

                    if(fichier)
                    {
                    fichier >> poscentrepoke.x;
                    }
                    fichier.close();

                    return 1;

            }
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              2 juillet 2007 à 13:44:23

              Pourquoi "return 1" ?

              Si c'est pour renvoyer quelquechose juste pour le faire, autant faire une procédure !
              • Partager sur Facebook
              • Partager sur Twitter
                2 juillet 2007 à 13:45:02

                return 1, je sais pas, il l'a mis dans son code mais bon je l'ai pas enlevé.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 juillet 2007 à 13:58:03

                  int chargerNiveau(SDL_Rect poscentrepoke)
                  {
                          ifstream fichier;
                          fichier.open("centrepoke.pos");

                          if(fichier)
                          fichier >> poscentrepoke.x; //Lorsqu'il n'y qu'une instruction dans le "if", on peut se passer des parenthèses
                          else
                          return 0;//Si le fichier n'a pas pu être ouvert, on retourne 0.
                          fichier.close();

                          return 1;

                  }


                  Et dans ton main (ou je ne sais où) tu mets ça:
                  if(!chargerNiveau(mon_sdl_rect))
                  return -1;


                  et aussi une chose me chagrine : tu veux modifier la valeur de "poscentrepoke", alors pourquoi n'utilise-tu pas les référances? (ou les pointeurs?)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    2 juillet 2007 à 14:01:49

                    Le problème c'est que quand tu récupères le contenu dans le fichier, tu récupères une chaine. Faut convertir cette chaine en int :


                    #include <string>
                    #include <sstream>
                    #include <fstream>
                    using namespace std;

                    int chargerNiveau(SDL_Rect poscentrepoke)
                    {
                            fstream fichier;
                            fichier.open("centrepoke.pos");
                            string tmp;

                            if(fichier)
                            {
                                   fichier >> tmp;
                                   istringstream iss(tmp);
                                   iss >> poscentrepoke.x;
                            }
                            fichier.close();
                    }
                     


                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juillet 2007 à 15:27:02

                      Dans ton code, tu mets fichier >> tmp; mais ce que je souhaite c'est que la première ligne !! et après je réouvre le fichier pour prendre la 2ème ligne afin que la 1 è ligne >> .x et la 2 è >> .y
                      sinon, gogeta 1 t'oublies après le if de mettre les parenthèses.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juillet 2007 à 15:28:43

                        Je t'ai dis que j'il n'y avait qu'une instruction au if, tu ne mettait pas les crochets. (RRRRRR ca m'énerve de devoir répéter 100 fois la même chose)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 juillet 2007 à 15:32:21

                          merci, j'ai appris ça en +. Merci de votre aide
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Ecrire grâce à fprintf et faire un espace dans le fichier texte

                          × 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