Effacer une ligne dans un .txt en C++ ?

Fermé
JojoLapin - 18 nov. 2007 à 14:37
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 19 nov. 2007 à 00:56
Bonjour,

Je voudrais savoir comment effacer une ligne (une seule ligne) dans un fichier .txt (ou .dat) en C++.
En fait je suis en train de programmer une "roue de la fortune" et je stocke les noms des joueurs et leurs points dans un fichier .dat (ou .txt), de cette manière...

NomJoueur1 points
NomJoueur2 points
NomJoueur3 points
etc...

J'aimerai savoir si il est possible, ou si il existe une fonction en C++ qui effacent une ligne lorsqu'elle est sélectionnée. (en fait c'est la solution que j'ai trouvée pour updater le score du joueur: lorsque le joueur entre son nom, soit on crée un nouvel utilisateur, soit on cherche dans le fichier si il existe déja... et si il existe déja, on sauvegarde le score et le nom, on l'efface du fichier, et je voudrais réécrire à la fin du jeu... mais pour ça, il faudrait que je sache comment effacer la ligne correspondant au joueur.

Je vous remercie!
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
19 nov. 2007 à 00:56
Je ne pense pas que ça existe. De manière générale c'est une mauvaise mémoire de stocker de l'information dans un fichier si c'est au cours du programme car un accès fichier est une opération lente. Il vaut donc mieux stocker l'information en mémoire. Elle sera d'ailleurs beaucoup plus simple à manipuler.

En particulier pour ce que tu fais, il existe en C++ une structure idéale : les std::map. Ici la clé de ta map sera un std::string (le nom du joueur) et la data un unsigned (son score).
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583

Les map permettent de chercher très facilement une clé (ou d'en vérifier l'existence), donc c'est exactement ce que tu veux faire. Voici ce que je te propose :
- tu charges un fichier au lancement du jeu ou quand tu charges une partie (dans une map),
- tu écris la map dans un fichier quand tu sauves une partie ou que tu quittes le jeu.
En pratique le fichier est donc lu/écrit complètement. Si cette solution te convient je peux te détailler la méthode.

La méthode est pénalisante si le le fichier de data est vraiment énorme (il est donc long à parser et à convertir sous forme de map, donc à mettre en mémoire). Ce n'est pas le cas ici donc ce n'est pas gênant. Pour anecdote, quand des structures de données sont énormes (genre plusieurs mégas en mémoire), on stocke des fichiers binaires (appelés fichier sérialisés) qui peuvent être chargés directement en mémoire. Tu n'en auras pas besoin dans ton cas mais si tu veux voir juste par curiosité à quoi ça ressemble :
https://www.boost.org/doc/libs/1_72_0/libs/serialization/doc/serialization.html

Rq : L'extension du fichier n'a aucune importance en soit, tu peux mettre un .dat un .txt ou .plop à la fin, ça n'a aucun impact.

Bonne chance
1