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 avec les fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut problème avec les fichiers
    salut
    j'ai fait un programme qui lit dans un fichier et quand il trouve .jout il lui ajoute un autre fichier
    voila mon code
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 1000
     
    main()
    {
          FILE *fich1 = NULL , *fich2 = NULL ;
          char T[N] , c = 0  ;
          char ajou[] = ".ajout" ;
     
          fich1 = fopen("3.txt" , "r+" );
          fich2 = fopen("4.txt" , "r" );
     
          if( fich1 == NULL && fich2 == NULL )
          printf("ERROR");
          else
          {
     
          while( fscanf( fich1 , "%s" , T ) != EOF )
          {
                 if( strcmp( ajou , T ) == 0 )
                 {
                     do
                     {
                             c = fgetc(fich2) ;
                             fprintf(fich1 , "%c" , c);
                     }
                     while( c != EOF );
                 }
          }
     
          fclose(fich1);
          fclose(fich2);
          }
     
          getch();
    }
    cepandant il marche pas ... il n'ecrit rien au 1er fichier !!!
    pourquoi ?

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par yous18 Voir le message
    salut
    j'ai fait un programme qui lit dans un fichier et quand il trouve .jout il lui ajoute un autre fichier
    voila mon code
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 1000
     
    main()
    {
          FILE *fich1 = NULL , *fich2 = NULL ;
          char T[N] , c = 0  ;
          char ajou[] = ".ajout" ;
     
          fich1 = fopen("3.txt" , "r+" );
          fich2 = fopen("4.txt" , "r" );
     
          if( fich1 == NULL && fich2 == NULL )
          printf("ERROR");
          else
          {
     
          while( fscanf( fich1 , "%s" , T ) != EOF )
          {
                 if( strcmp( ajou , T ) == 0 )
                 {
                     do
                     {
                             c = fgetc(fich2) ;
                             fprintf(fich1 , "%c" , c);
                     }
                     while( c != EOF );
                 }
          }
     
          fclose(fich1);
          fclose(fich2);
          }
     
          getch();
    }
    cepandant il marche pas ... il n'ecrit rien au 1er fichier !!!
    pourquoi ?
    Pour gérer les fichiers, je recommande une organisation bien plus rigoureuse, qui gère automatiquement les cas d'erreur :
    1 Gérer le premier fichier :
    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
     
    #include<stdio.h>
     
    int main (void)
    {
    #define F1 "3.txt"
     
       FILE *fich1 = fopen (F1, "r+");
       if (fich1 != NULL)
       {
             /* traitements */
     
          fclose (fich1), fich1 = NULL;
       }
       else
       {
          perror (F1);
       }
     
       return 0;
    }
    2 ajouter le code pour le 2ème fichier:
    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
     
    #include<stdio.h>
     
    int main (void)
    {
    #define F1 "3.txt"
    #define F2 "4.txt"
     
       FILE *fich1 = fopen (F1, "r+");
       if (fich1 != NULL)
       {
          FILE *fich2 = fopen (F2, "r");
          if (fich2 != NULL)
          {
             /* traitements */
     
             fclose (fich2), fich2 = NULL;
          }
          else
          {
             perror (F2);
          }
          fclose (fich1), fich1 = NULL;
       }
       else
       {
          perror (F1);
       }
     
       return 0;
    }
    Cette construction logique garantit une gestion parfaite des erreurs et des fermetures de fichiers, ce qui n'est pas le cas de ton code.

    L'excution donne évidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    3.txt: No such file or directory
     
    Press ENTER to continue.
    Car tu n'as pas donné le fichier...

  3. #3
    Membre très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut
    merci Emmanuel je vais aprendre votre methode qui detecte le erreurs ... mais quand je l'ai utilisé rien n'a changé dans les 2 fichiers et aucun message d'erreur n'est affiché

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 1000
     
    int main (void)
    {
    #define F1 "3.txt"
    #define F2 "4.txt"
     
          char T[N] , c = 0  ;
          char ajou[] = ".ajout" ;
     
       FILE *fich1 = fopen (F1, "r+");
       if (fich1 != NULL)
       {
          FILE *fich2 = fopen (F2, "r");
          if (fich2 != NULL)
          {
          while( fscanf( fich1 , "%s" , T ) != EOF )
          {
                 if( strcmp( ajou , T ) == 0 )
                 {
                     do
                     {
                             c = fgetc(fich2) ;
                             fprintf(fich1 , "%c" , c);
                     }
                     while( c != EOF );
                 }
          }
     
     
             fclose (fich2), fich2 = NULL;
          }
          else
          {
             perror (F2);
          }
          fclose (fich1), fich1 = NULL;
       }
       else
       {
          perror (F1);
       }
     
       getch();
       return(0);
    }
    de quel fichier tu parlais quand tu m'a dit qu'il une erreur à l'execution ?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yous18 Voir le message
    merci Emmanuel je vais aprendre votre methode qui detecte le erreurs ... mais quand je l'ai utilisé rien n'a changé dans les 2 fichiers et aucun message d'erreur n'est affiché

    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 1000
     
    int main (void)
    {
    #define F1 "3.txt"
    #define F2 "4.txt"
     
          char T[N] , c = 0  ;
          char ajou[] = ".ajout" ;
     
       FILE *fich1 = fopen (F1, "r+");
       if (fich1 != NULL)
       {
          FILE *fich2 = fopen (F2, "r");
          if (fich2 != NULL)
          {
          while( fscanf( fich1 , "%s" , T ) != EOF )
          {
                 if( strcmp( ajou , T ) == 0 )
                 {
                     do
                     {
                             c = fgetc(fich2) ;
                             fprintf(fich1 , "%c" , c);
                     }
                     while( c != EOF );
                 }
          }
     
     
             fclose (fich2), fich2 = NULL;
          }
          else
          {
             perror (F2);
          }
          fclose (fich1), fich1 = NULL;
       }
       else
       {
          perror (F1);
       }
     
       getch();
       return(0);
    }
    Je n'arrive pas vraiment à piger ce que tu cherches à faire. Bon, je vais te dire ce que je lis
    1) tu ouvres un fichier 1 en R/W et un fichier 2 en R
    2) tu lis un mot dans le fichier 1
    3) tu compares ce mot avec ".ajou"
    4) si c'est le cas alors à l'endroit où tu te trouves, tu écris tout le contenu du fichier 2 (y compris EOF car tu ne sors pas assez tôt).

    Faut savoir que quand t'écris dans un fichier, t'écris à l'endroit où le pointeur interne se trouve. Donc quand tu lis un mot ton pointeur se trouve à la fin du mot. Si tu te mets à écrire tu vas écrire après le mot mais en écrasant ce qu'il y avait au préalable (il n'y a pas d'insertion). C'est bien ça que tu veux ?

    Ensuite au mot suivant, si c'est ajout tu vas tenter de rajouter le contenu du 2° fichier mais ça ne marchera plus puisque l'index interne du 2° fichier se trouve déjà à la fin => tu peux pas le relire (ou alors faut te repositionner au début => fseek())

    Bon, essaye de mieux définir en toi-même quel est ton but pour traduire ce but en algo.
    Bon, sinon ta boucle interne de copie est mal écrire. Faut sortir au moment du EOF et non après...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ((c=fgetc(fich2)) != EOF)
           fprintf(fich1 , "%c" , c);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par yous18 Voir le message
    de quel fichier tu parlais quand tu m'a dit qu'il une erreur à l'execution ?
    Bah, c'est indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3.txt: No such file or directory
    Ce fichier ne se trouve pas comme par magie sur mon PC... C'est à toi de le publier (au moins son contenu si c'est du texte, sinon, un lien ou une pièce jointe...)

  6. #6
    Membre très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut
    voila 3.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    salut ca va
    .ajout 
    ok je t'attend
    et 4.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oui yous
    on va au cinema

  7. #7
    Membre très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut
    j'ai compri le curseur est à la fin du fichier
    mais t'a dit qu'il y a pas un moyen d'insertion car c'est mon but de ce exercice faire un programme qui fai comme include ajout le contenu d'un autre fichier.

    et moi j'ai qu'un seul ajout pour le moment dans mon 1er fichier alors le curseur du 2eme fichier ne sera pas à la fin car il sera lit pour la 1er fois.

Discussions similaires

  1. Problème avec les fichiers .CHM
    Par Safaritn dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 29/11/2006, 13h37
  2. [TexShop/MacOSX] Problème avec les fichiers .eps
    Par rudix dans le forum Editeurs / Outils
    Réponses: 4
    Dernier message: 09/10/2006, 14h07
  3. Problème avec les fichiers
    Par Guillou dans le forum C
    Réponses: 3
    Dernier message: 13/05/2006, 12h54
  4. Problème avec les fichiers en C++
    Par snatch321 dans le forum C++
    Réponses: 7
    Dernier message: 09/05/2006, 19h07
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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