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 :

Enregistrer les records dans fichier txt


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut Enregistrer les records dans fichier txt
    Bonjour à tous,

    Me voilà avec un soucis, j'essaye actuellement de sauvegarder les meilleurs
    temps réaliser par chaque joueur pour une partie je voudrais donc gérer un historique des records.

    Petits soucis en fait j'arrive à lire le fichier texte mais à partir du moment ou j'essaye d'écrire dans le fichier il m'efface tous mon fichier texte...

    J'ai essayer également de mettre dans le même fichier texte le nom du joueur et de lui faire correspondre son temps ainsi :

    28 Moi
    49 Moi
    62 Toi
    ...

    Ainsi pouvoir effectuer un listing des 10 meilleurs temps !
    La fin de mon code est en commentaire car ne fonctionnant pas du tous je l'ai quand même jointe dans le cas où je serais pas loin de la solution.

    J'ai vu que je devais utiliser fseek, mais pour le moment je n'y suis pas encore arriver...

    Actuellement pour mon code j'ai ça :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    void record(int niveau,int sec,int score[6],int Record[20]);
     
    int main()
    {
        int score[6]={0};
        char Record[20];
     
        record(1,20,score,Record); // Pour s'implifier ici j'ai imposer le niveau 1 et un record de 20 secondes
     
        return 0;
    }
     
     
    void record(int niveau,int sec,int score[6],int Record[20])
    {
        int I,J;
        FILE* fichier;
     
        if (niveau==1)
            fichier = fopen("rec_fac.txt", "r");
     
        if (fichier != NULL)
        {
            for (I=0;I<1;I++)
            {
                //int tmp;
                fscanf(fichier,"%u",&score[I]);
                //score_fac[I] = tmp;
                printf("Record precedent %u\n",score[I]);
                printf("Votre temps : %d s \n",sec);
            }
     
            //On ferme le fichier qui a été ouvert
            printf("\n");
            fclose(fichier);
        }
     
        else
        {
            //On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier .txt");
        }
        fflush(stdout);
     
        //printf("%i\n",score[0]);
        //printf("%i\n",sec);
     
        //**************REMPLACEMENT D'UN DES MEILLEURS TEMPS******************//
     
        if (sec<score[0])
        {
            if (niveau==1)
            fichier = fopen("rec_fac.txt", "w");
     
            if (fichier != NULL)
            {
                fseek(fichier, 0, SEEK_SET);
                fprintf(fichier,"%u",sec); //<<<<<< PROBLEME ICI J'EFFACE TOUS LE FICHIER...
     
                // On ferme le fichier qui a été ouvert
                printf("\n");
                fclose(fichier);
                printf("Nouveau Meilleur Temps sauvegarder\n");
            }
            else
            {
                // On affiche un message d'erreur si on veut
                printf("Impossible d'ouvrir le fichier .txt");
            }
            fflush(stdout);
        }
     
            //CETTE PARTIE NON PLUS NE FONCTIONNE PAS CAR J'AIMERAIS REMPLACER LE NOM DE L'ANCIE JOUEUR PAR CELUI DU NOUVEAU...
     
            //**************REMPLACEMENT DU NOM CORRESPONDANT AU MEILLEUR TEMPS******************//
            /*
            printf("Meilleur Temps FELICITATION !!!!!!!!!!!!\n");
            do
            {
                printf("Entrez votre Nom (max.10):");
                scanf("%s",Record);
            }
            while (strlen(Record)>11);
     
            //fichier = fopen("record_.txt", "w+");
            //fprintf(fichier,"%u",NULL);
            if (fichier != NULL)
            {
     
                for (I=0;Record[I]!='\0';I++)
                {
                    fprintf(fichier,"%c",Record[I]);
                }
                // On ferme le fichier qui a été ouvert
     
                printf("\n\nsauvegarde effectuee\n");
                printf("\n");
                fclose(fichier);
            }
            else
            {
                // On affiche un message d'erreur si on veut
                printf("Impossible d'ouvrir le fichier .txt");
            }
            fflush(stdout);
     
            printf("\n");
        }
     
        else
        {
            printf("Vous n'avez pas etablit de record la prochaine fois ;-) \n");
            printf("\n");
        }*/
     
        getch();
        return 0;
    }
    Code fichier des records : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    100          Masterix59
    0 	     Moi
    0            Moi
    0            Moi
    0            Moi
    0            Moi
    0            Moi
    0            Moi
    0            Moi
    0            Moi

    Merci d'avance pour votre aide !

    Masterix 59

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    La seconde option de la fonction fopen permet de spécifier comment on accède au fichier :
    Citation Envoyé par man fopen
    r
    Ouvre le fichier en lecture. Le pointeur de flux est placé au début du fichier.
    r+
    Ouvre le fichier en lecture et écriture. Le pointeur de flux est placé au début du fichier.
    w
    Ouvre le fichier en écriture. Le fichier est créé s'il n'existait pas. S'il existait déjà, sa longueur est ramenée à 0. Le pointeur de flux est placé au début du fichier.
    w+
    Ouvre le fichier en lecture et écriture. Le fichier est créé s'il n'existait pas. S'il existait deja, sa longueur est ramenée à 0. Le pointeur de flux est placé au début du fichier.
    a
    Ouvre le fichier en ajout (écriture à la fin du fichier). Le fichier est créé s'il n'existait pas. Le pointeur de flux est placé à la fin du fichier.
    a+
    Ouvre le fichier en lecture et ajout (écriture en fin de fichier). Le fichier est créé s'il n'existait pas. Le pointeur de flux est placé à la fin du fichier.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut
    Ici dans le code j'utilise bien 'r' pour la lecture est récupéré le meilleur temps.
    J'utilise ensuite 'w' pour écrire dans le fichier mais à ce moment là au lieu d'écrire et de laisser la suite il m'efface tout mon fichier texte et remplace tous le texte entrée, par le meilleur temps qui vient d'être effectué.

    J'aimerais pouvoir dire de remplacer la ligne :

    100 Masterix59

    par

    20 Moi

    Donc comment effacer une partie du texte et la remplacer par autre chose donc ici remplacer le 100 par le 20, puis ensuite changer le nom du joueur ayant réaliser le meilleur temps en l'occurence ici Moi.

    J'espère ne pas être trop confus dans mes explications...

    Merci encore à tous

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par masterix59 Voir le message
    I
    J'utilise ensuite 'w' pour écrire dans le fichier mais à ce moment là au lieu d'écrire et de laisser la suite il m'efface tout mon fichier texte et remplace tous le texte entrée, par le meilleur temps qui vient d'être effectué.
    Citation Envoyé par man fopen
    w
    Ouvre le fichier en écriture. Le fichier est créé s'il n'existait pas. S'il existait déjà, sa longueur est ramenée à 0. Le pointeur de flux est placé au début du fichier.
    En d'autre termes, "w" efface le fichier.

    Si tu veux écrire dans un fichier sans effacer ce qu'il y a déjà dedans, tu dois l'ouvrir en mode ajout "a" : tu pourra écrire à la fin du fichier.
    Il n'existe pas de méthode toute faite pour écrire en début de fichier.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut
    Ah merci mabu je n'avais pas noté cette différence...

    Mais le problème qui se pose avec 'a' c'est que si je l'utilise il va m'ajouter le texte à la fin de celui ci même en rajoutant l'instruction :

    Mais comment faire alors pour pouvoir insérer mon texte et le remplacer à la place de celui déjà présent, sans tous devoir effacer ou sans tous devoir sauvegarder avant ?

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par masterix59 Voir le message
    Mais comment faire alors pour pouvoir insérer mon texte et le remplacer à la place de celui déjà présent, sans tous devoir effacer ou sans tous devoir sauvegarder avant ?
    sans sauvegarder, c'est impossible...

    Mais tu peux aussi procéder de cette façon :
    1. Ouvrir un fichier temporaire en écriture
    2. Écrire à ligne à ajouter dans ce fichier temporaire
    3. Ouvrir le fichier à compléter en lecture
    4. Copier le contenu du fichier dans le fichier temporaire
    5. Fermer les fichiers
    6. Replacer le fichier original par le temporaire.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut
    Merci Mabu ça pourrais marcher en fait !

    Si je comprend bien si par exemple je pourrais faire un test sur toute les valeurs dans le fichier texte copier dans le fichier temporaire le début jusqu'à la ligne en trop par exemple, puis ajouter à la suite ma ligne supplémentaire et finir en copiant le reste sans la ligne que je vient de supprimer.

    Je vais essayer ça et je vous tient au courant

    Merci encore ^^

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    L'idée est là.

    On peut trouver quelque chose d'assez similaire dans la FAQ : Comment supprimer une ligne dans un fichier texte ?

Discussions similaires

  1. [PHP 5.0] Enregistrement liste déroulante dans fichier txt
    Par djaminebiz dans le forum Langage
    Réponses: 10
    Dernier message: 20/05/2013, 16h12
  2. Script enregistrement adresse IP dans fichier txt
    Par zarex5 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 23/04/2013, 08h56
  3. [XML] lire un fichier en xml et enregistrer les donnees dans MySQL
    Par nath-0-0 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/08/2006, 14h06
  4. Réponses: 1
    Dernier message: 14/04/2006, 16h51
  5. Réponses: 12
    Dernier message: 27/06/2005, 19h06

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