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 :

Problème lors de l'écriture dans un fichier texte


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 32
    Points
    32
    Par défaut Problème lors de l'écriture dans un fichier texte
    Bonjour,

    J'ai commencé un programme qui prend toutes les lettres de l'alphabet une par une, les mets dans une chaîne et écris cette chaîne dans un fichier texte (pour l'instant je test sa pour faire autre chose après).
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        if("fichier.txt" != NULL)
        {
            remove("fichier.txt");
        }
        FILE* fichier = NULL;
        fichier = fopen("fichier.txt", "w");
        int i = 0;
        char alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','\0'};
        char chaine1[1] = "";
     
        while (i<36)
        {
            chaine1[0] = alphabet[i];
            fputs(chaine1, fichier);
            i++;
            fclose(fichier);
        }
        return 0;
    }
    Le fichier texte devrait donc contenir "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" mais non il contient "AABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" soit un "A" en trop.

    Quelqu'un aurait une idée d'où viens le problème ?

    De plus j'aimerai rajouter un "\n" dans chaine1 afin que les lettres soient sur des lignes différentes, j'ai tenter plusieurs fonction mais sans succès. Une idée ?

    Cordialement,

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Déjà : déplace ton fclose hors de la boucle...

    Ensuite :
    Ça ne teste pas si le fichier existe ou non...
    Tu dois tester l'ouverture du fichier (si fopen te renvoie NULL ou pas)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Cela fait donc ç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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        FILE* fichier = NULL;
        fichier = fopen("fichier.txt", "r");
        if (fichier != NULL)
        {
            remove("fichier.txt");
        }
        fichier = fopen("fichier.txt", "w");
        int i = 0;
        char alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','\0'};
        char chaine1[1] = "";
     
        while (i<36)
        {
            chaine1[0] = alphabet[i];
            fputs(chaine1, fichier);
            i++;
        }
        fclose(fichier);
        return 0;
    }
    Et mon fichier.txt contient ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789BABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789CABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789DABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789EABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789FABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789GABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789HABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789IABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789JABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789KABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789LABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789MABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789NABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789OABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789PABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789QABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789RABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789SABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789TABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789UABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789VABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789WABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789XABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789YABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ZABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567891ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567892ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567893ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567894ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567895ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567896ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567897ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567898ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567899ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    Encore pire :'(

    Edit : Code édité.

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Avant de remove, n'oublie pas de close !
    Le mieux serait plutôt de voir comment trunk le fichier et le create !

    D'après ça, il faudrait un "w+", plutôt qu'un w...

    Cela fait exactement ce que tu veux : remettre à 0 le fichier s'il existe ou le créer !

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

    Tu souhaites écrire un caractère à la fois, or la fonction fputs écrit une chaîne de caractères, qui s'arrête donc au premier caractère '\0' rencontré et pas avant.
    C'est fputc qu'il te faut utiliser ici.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Avant de remove, n'oublie pas de close !
    Le mieux serait plutôt de voir comment trunk le fichier et le create !

    D'après ça, il faudrait un "w+", plutôt qu'un w...

    Cela fait exactement ce que tu veux : remettre à 0 le fichier s'il existe ou le créer !
    Donc à la place de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fichier = fopen("fichier.txt", "r");
        if (fichier != NULL)
        {
            remove("fichier.txt");
        }
        fichier = fopen("fichier.txt", "w");
    J'ai sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = fopen("fichier.txt", "w+");
    _________________________________________________________________
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Tu souhaites écrire un caractère à la fois, or la fonction fputs écrit une chaîne de caractères, qui s'arrête donc au premier caractère '\0' rencontré et pas avant.
    C'est fputc qu'il te faut utiliser ici.
    Parfait !

    Avec ce que tu m'a conseillé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while (i<36)
        {
            fputc(alphabet[i], fichier);
            i++;
        }
    J'ai bien "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" =)

    Ne manque plus qu'a savoir comment faire pour mettre un caractère par ligne :s

  7. #7
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Eh bah... un 2e fputc avec en paramètre '\n' !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Eh bah... un 2e fputc avec en paramètre '\n' !
    J'ai déjà essayé :
    Mais cela ne fonctionne pas, j'ai toujours : "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Problème résolu avec :
    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
    int main()
    {
        FILE* fichier = NULL;
        fichier = fopen("fichier.txt", "w+");
        int i = 0;
        char alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','\0'};
        char retour='\n';
        while (i<36)
        {
            fputc(alphabet[i], fichier);
            fputc(retour, fichier);
            i++;
        }
        fclose(fichier);
        return 0;
    }
    Merci beaucoup de votre aide =D

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/05/2011, 11h22
  2. Réponses: 2
    Dernier message: 25/09/2009, 12h56
  3. Problème lors de l'écriture dans un fichier.
    Par captainflex dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 16/05/2007, 13h42
  4. Erreur E/S 32 lors de l'écriture dans un fichier text.
    Par yosthegost dans le forum Delphi
    Réponses: 6
    Dernier message: 01/06/2006, 11h45
  5. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25

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