É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:
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:
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