IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Écrire à un endroit précis dans un fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Écrire à un endroit précis dans un fichier
    Bonjour,

    Je suis en train de développer un jeu, et j'ai un problème concernant le score. En effet, je souhaite enregistrer le score à la fin de la partie dans un fichier .csv. Mais je veux que ce score se trie automatiquement à la fin de la partie. C'est à dire que mon fichier doit être rangé du plus grand score au plus petit.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    FILE* file;
    char **tab;
    char score_text[20] = "";
    int score_file;
    file = NULL;
    file = fopen("score.csv", "r+");
    	if (file != NULL)
    	{
    		while (fgets(score_text, 50, file) != NULL)
    		{
    			tab = my_explode(score_text, ';');
    			score_file = strtol(tab[0], (char **)NULL, 10);
    			//Si le score actuel est plus grand que le score de la ligne lu
    			if (score > score_file)
    			{
    				fseek(file, -(sizeof(score_text)), SEEK_CUR);
    				sprintf(score_text, "%d;%d;\n", score, time);
    				fputs(score_text, file);
    				break;
    			}
    			tab = 0;
    		}
    		fclose(file);
    	}
    La fonction my_explode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    char   **my_explode(char *str, char separator)
    {
      char **res = NULL;
      int  nbstr = 1;
      int  len;
      int  from = 0;
      int  i;
      int  j;
      res = (char **) malloc(sizeof (char *));
      len = strlen(str);
      for (i = 0; i <= len; ++i)
        {
          if ((i == len) || (str[i] == separator))
       {
         res = (char **) realloc(res, ++nbstr * sizeof (char *));
         res[nbstr - 2] = (char *) malloc((i - from + 1) * sizeof (char));
         for (j = 0; j < (i - from); ++j)
             res[nbstr - 2][j] = str[j + from];
         res[nbstr - 2][i - from] = '\0';
         from = i + 1;
         ++i;
       }
        }
      res[nbstr - 1] =  NULL;
      return res;
    }
    La variable score est récupéré en argument de ma fonction de sauvegarde, ainsi que ma variable time.
    Le problème est que le fputs écrit en fin de fichier et non à la position voulu, c'est à dire avant le score plus petit que celui fait dans la partie actuelle.

    Si vous avez besoin de plus de renseignements, n'hésitez pas à me demander. Merci pour votre aide.

    [EDIT] L'enregistrement du score est inscrit dans le fichier de la façon suivante : score;time;\n

    Cordialement,
    Ginwu

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Je viens de trouver la solution à mon erreur...

    C'est une erreur de débutant, il faut utiliser strlen au lieu de sizeof dans la fonction fseek.

    Cordialement,
    Ginwu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire à un endroit précis dans un fichier
    Par jklms dans le forum Langage
    Réponses: 7
    Dernier message: 28/01/2014, 11h03
  2. Rechercher et remplacer une chaine à un endroit précis dans un fichier
    Par david2109 dans le forum Shell et commandes POSIX
    Réponses: 17
    Dernier message: 26/08/2013, 22h35
  3. Ecrire à un endroit précis dans un fichier txt
    Par fraid49 dans le forum Général Python
    Réponses: 2
    Dernier message: 02/10/2008, 09h53
  4. Ecrire à un endroit précis dans un fichier texte
    Par zemeilleurofgreg dans le forum Delphi
    Réponses: 4
    Dernier message: 26/06/2006, 21h51
  5. [C#] Lecture dans un endroit précis d'un fichier ...
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/10/2004, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo