[C] Remplacer une valeur dans un fichier ...
Vidarce
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
bonjour à tous,
j'ai un petit probleme sur un programme que je suis en train de faire.
Je m'expliqe :
Je crée (pour mon cours de C) un petit jeux où je dois enregistrer les meilleurs temps dans un fichier ! Le probleme est que je ne vois pas comment faire pour deplacer le meilleur temps dans mon fichier et supprimer la dernière ligne de ce dernier (car il ne doit y avoir que 5 meilleurs scores dans ce fichier);
Après quelques heures de recherches j'ai reussit (en mode lecture du fichier) a trouvé à quel endroit je devais mettre le nouveau record ! Mais le problème est de savoir comment remplacer cette valeur !!! et déplacer du coup toute les autres !!!
Je tiens a vous préciser que je ne veux pas le code tout fait mais juste des indications me permettant d'avancer :D !
je vous met mon code me permetttant de me situer sur le bon score :
record=fopen("best_record.txt","r");
if(record!=NULL)
{
do
{
fgets(Score,100,record);
sscanf(Score,"%d %lf s",&classement,&temps);
printf("%d %lf\n",classement,temps);
}
while(!feof(record) && (elapsed>temps));
}
fclose(record);
Merci d'avance a tous ceux qui m'aideront !
j'ai un petit probleme sur un programme que je suis en train de faire.
Je m'expliqe :
Je crée (pour mon cours de C) un petit jeux où je dois enregistrer les meilleurs temps dans un fichier ! Le probleme est que je ne vois pas comment faire pour deplacer le meilleur temps dans mon fichier et supprimer la dernière ligne de ce dernier (car il ne doit y avoir que 5 meilleurs scores dans ce fichier);
Après quelques heures de recherches j'ai reussit (en mode lecture du fichier) a trouvé à quel endroit je devais mettre le nouveau record ! Mais le problème est de savoir comment remplacer cette valeur !!! et déplacer du coup toute les autres !!!
Je tiens a vous préciser que je ne veux pas le code tout fait mais juste des indications me permettant d'avancer :D !
je vous met mon code me permetttant de me situer sur le bon score :
record=fopen("best_record.txt","r");
if(record!=NULL)
{
do
{
fgets(Score,100,record);
sscanf(Score,"%d %lf s",&classement,&temps);
printf("%d %lf\n",classement,temps);
}
while(!feof(record) && (elapsed>temps));
}
fclose(record);
Merci d'avance a tous ceux qui m'aideront !
A voir également:
- [C] Remplacer une valeur dans un fichier ...
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
Salut.
Moi dans ton cas, je me fait pas chier :
je lis tout et je met dans une variable qui va bien : genre tableau de string.
Ensuite j'effectu la bonne opération sur cette variable (placement du meilleur score, et virer le dernier).
Ensuite, j'écrase tout simplement le fichier de records.
c'est bourrin, mais tant que le fichier n'est pas trop gros.
Moi dans ton cas, je me fait pas chier :
je lis tout et je met dans une variable qui va bien : genre tableau de string.
Ensuite j'effectu la bonne opération sur cette variable (placement du meilleur score, et virer le dernier).
Ensuite, j'écrase tout simplement le fichier de records.
c'est bourrin, mais tant que le fichier n'est pas trop gros.
Merci pour ta réponse !
J'y avais pas pensé je dois l'avouer !! Mais par contre, tout mettre dans "genre tableau de string" je comprend pas trop pour être honnete !!
Si tu pouvait être un tout petit peu plus précis, ca me ferait plaisir.
J'y avais pas pensé je dois l'avouer !! Mais par contre, tout mettre dans "genre tableau de string" je comprend pas trop pour être honnete !!
Si tu pouvait être un tout petit peu plus précis, ca me ferait plaisir.
un tableau de string, ou tableau de chaine de caractère:
char** ou string[5]
mettons un char** resu;
dans resu[0] tu met la premiere ligne de ton fichier (temps +nom +...)
dans resu[1] l deuxième etc.
ensuite, tu compare ton nouveau temps avec ce qu'il y a dans resu.
metons que tu le mettent en position trois, tu fai :
strcpy(resu[4],resu[3]);
strcpy(resu[3],resu[2]);
strcpy(resu[2],nouveau_record);
Ensuite tu écrit resu dans ton fichier.
char** ou string[5]
mettons un char** resu;
dans resu[0] tu met la premiere ligne de ton fichier (temps +nom +...)
dans resu[1] l deuxième etc.
ensuite, tu compare ton nouveau temps avec ce qu'il y a dans resu.
metons que tu le mettent en position trois, tu fai :
strcpy(resu[4],resu[3]);
strcpy(resu[3],resu[2]);
strcpy(resu[2],nouveau_record);
Ensuite tu écrit resu dans ton fichier.
Je pense que tu ne devrais enregistrer que les meilleurs temps (pas le classement), avec un bon séparateur (genre ';'). Pour faire propre, le classement et le "s" n'ont pas grand chose à faire dans le fichier (séparation données/affichage)
Ensuite tu crée un tableau de float, dans lequel tu mets en premier le nouveau temps à insérer, suivi des 5 temps enregistrés dans le fichier. Ensuite petit exercice de classement du tableau (tri à bulles mon amour), et tu n'as plus qu'à réécrire (écraser) le fichier de sauvegarde avec les 5 meilleurs temps...
Je sais pas si c'est clair ! ^^
Ensuite tu crée un tableau de float, dans lequel tu mets en premier le nouveau temps à insérer, suivi des 5 temps enregistrés dans le fichier. Ensuite petit exercice de classement du tableau (tri à bulles mon amour), et tu n'as plus qu'à réécrire (écraser) le fichier de sauvegarde avec les 5 meilleurs temps...
Je sais pas si c'est clair ! ^^
Merci pour ta réponse bumblebee !
Donc si j'ai bien compris, je met ke les temps ==> je lis mon fichier ou il y a deja des temps, je les met dans un tableau de float, je prend ke les meilleurs temps, je le classe et hop je l'écris dans mon fichier c ca ??
Merci d'avance
Donc si j'ai bien compris, je met ke les temps ==> je lis mon fichier ou il y a deja des temps, je les met dans un tableau de float, je prend ke les meilleurs temps, je le classe et hop je l'écris dans mon fichier c ca ??
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Cela pourrait donner une fonction ressemblant à ça
bool insert_temps(int temps) { const unsigned int line_size=100; const unsigned int nbrecord=5; int record[nbrecord]; int i, temp; bool insert = false; char Score[line_size]; // Petite initialisation à -1 par exemple for (i=0; i<nbrecord; i++) record[i] = -1; i = 0; FILE *stream = fopen("best_record.txt","rt"); if (stream != NULL) { // Récupération des données do { if (fgets(Score, line_size, stream) == NULL) continue; // Fin de fichier sscanf(Score,"%d\n",&temp); // Insertion meilleur temps if (!insert && (temps > temp)) { record[i] = temps; insert = true; i++; } if (i<nbrecord) record[i] = temp; i++; } while (! feof(stream) && (i<nbrecord)); fclose(stream); } // le temps n'a pas été inséré if ((i<nbrecord) && !insert) record[i] = temps; // Ecriture du fichier stream = fopen("best_record.txt","wt"); for (i=0; i<nbrecord; i++) if (record[i] != -1) fprintf(stream,"%d\n", record[i]); fclose(stream); return true; }: