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 :

Affichage du flux d'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut Affichage du flux d'un fichier
    Bonsoir, j'ai fait un petit programme qui compile bien, mais ne fais pas ce que je demande.
    En effet il a pour but d’écrire dans un fichier et de l'afficher à l’écran. il écrit mais ne peut l'afficher à l’écran.
    Alors je sollicite votre aide pour comprendre ce qui ne va pas dans mon programme. voici le 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <stdio.h>
    #include <stdlib.h>
    #define T_MAX 500  T//Taille maximale de caracteres a lire
     
     void afficher(FILE *fichier);  // fonction charger lire le fichier 
     
    int main(int argc, char **argv)
    {    
    	FILE *file1;
    	//char chaine[T_MAX] ="Votre fichier est dans votre main.\n Gardez la peche...\0" ;
    	int i;
     
     
    	file1 = malloc(sizeof(int));
    	if(file1 !=NULL){
     
         file1 =fopen("text", "r+") ;
     
            printf("Fichier en cours de creation...\n");
            fputs("Votre fichier est dans votre main.\n Gardez la peche...\0", file1) ;	 // contenu du fichier
    	    printf(" LECTURE DU FICHIER \n"); 
            afficher(file1); // appel de la fonction pour afficher le contenu du fichier
    		printf("//--------FIN FU FICHIER-------\\\\");
     
           fclose(file1); 	
         }
    	return 0;
     
      } 
     
     
     /** fonction de traitement  flux **/
    void afficher(FILE *fichier	){
    	 int i ;	
    	 char flux[T_MAX] ;
    	 printf("\t\t -------Fonction Afficher-------\n");
     
        do{
    		flux[i] =fgetc(fichier); //recuperation du flux dans un tableau de caractères
     
    		}while(i!= EOF) ;	 
     
    	do{
    		//printf("%c",flux[i]) ;
    		fputc(flux[i],fichier);  // afficher le contenu du fichier à l'ecran
     
    		} while(i!=EOF) ;
    		printf("FIN FONCTION\n");
     
     fclose(fichier) ;
        return;
     
    }
    Merci de votre attention.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Il y a beaucoup d'erreurs dans ce programme.

    • Citation Envoyé par Kouamé josué Voir le message
      file1 = malloc(sizeof(int));
      WUT?
    • Citation Envoyé par Kouamé josué Voir le message
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      do {
          flux[i] = fgetc(fichier); //recuperation du flux dans un tableau de caractères
      } while (i != EOF);
      Et i est mis à jour par l'action du saint esprit ?
    • "r+" n'est pas le bon mode pour créer un fichier ;
    • tu ne vérifies aucune valeur de retour (sauf celle de malloc ) ;
    • tu ne rembobines pas ton fichier avant de le lire ;
    • tu fermes ton fichier deux fois...


    Contentes-toi pour commencer d'afficher le contenu d'un fichier que tu as déjà créé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut
    J'ai apporté des modifications au code; mais ça ne fonctionne toujours pas.
    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
    #include <stdio.h>
    #include <stdlib.h>
    #define T_MAX 500  //Taille maximale de caracteres a lire
     
     void afficher(FILE *fichier);  // fonction charger lire le fichier 
     
    int main(int argc, char **argv)
    {    
    	FILE *file1;
     
    	file1 = malloc(sizeof(int));
    	if(file1 !=NULL){
     
         file1 =fopen("text", "r") ; //le fichier 'text' a deja un contenu 
     
    	    printf(" LECTURE DU FICHIER \n"); 
            afficher(file1); // appel de la fonction pour afficher le contenu du fichier
    		printf("//--------FIN FU FICHIER-------\\\\");
     
           fclose(file1); 	
         }
    	return 0;
     
      } 
     
     
     /** fonction de traitement  flux **/
    void afficher(FILE *fichier	){
    	 int i = 0;	
    	 char flux[T_MAX] ;
    	 printf("\t\t -------Fonction Afficher-------\n");
     
        do{
    		flux[i] =fgetc(fichier); //recuperation du flux dans un tableau de caractères
    		++i ;
    		}while(i!= EOF) ;	 
     
    	do{		
    		fputc(flux[i],fichier);  // afficher le contenu du fichier à l'ecran
    		++i ;	
    		} while(i!=EOF) ;
    		printf("FIN FONCTION\n");
     
        return;
     
    }
    Quand j'éxecute voici qui s'affiche dans la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     LECTURE DU FICHIER 
    		 -------Fonction Afficher-------
    Erreur de segmentation (core dumped)
    Je ne comprends vos commentaires :
    "r+" n'est pas le bon mode pour créer un fichier ;
    Car dans la documentation il est ecrit
    ‘r+’ Open an existing file for both reading and writing. The initial contents
    of the file are unchanged and the initial file position is at the beginning
    of the file.
    Moi je voudrais ecrire dans un fichier que je crée et que j'affiche le contenu.
    Ça auusi je ne comprends pas
    tu ne rembobines pas ton fichier avant de le lire
    .
    Merci de m'aporter plus de précision sur ce qui ne marche dans le code.

  4. #4
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    1. Alors, dans ton code, le pointeur *file1 ne doit pas être alloué par un malloc. C'est la fonction fopen(..) qui initialise ce pointeur et la fonction fclose(..) qui le libère (attention, le pointeur n'est pas remis à NULL après fclose(..)).

    2. Après l'appel de la fonction fopen(..) il faut toujours tester si le pointeur sur le descripteur de fichier est correctement alloué (!=NULL) sinon, lors de la lecture ou l'écriture tu vas avoir de drôle de résultat et au pire un segment fault.

    3. Pour lire un fichier texte, je te conseillerai d'utiliser la fonction fgets(..) qui va lire une "ligne" jusqu'a trouver le caractère EOF ou \0.

    4.Exemple de lecture d'un 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
    /* Lecture d'un fichier: ATTENTION programme non testé */
        FILE *file1 = NULL ;
        char ligne[1024] ;
     
        // Ouvrir le fichier
        file1 = fopen("text", "r") ;        // "r" : Ouveture en lecture seule / "w+" : Création du fichier en lecture et écriture
        // Si erreur d'ouverture ...
        if(file1==NULL) {
            printf("Erreur d'ouverture du fichier \"text\".\n") ;
            return EXIT_FAILURE ;
        }
     
        // Lecture du fichier texte
        // Tant qu'on est pas à la fin du fichier ...
        while(!feof(file1)) {
            // Lecture d'une ligne du fichier ...
            if(fgets(ligne, 1024, file1))
                printf("%s", ligne) ;       // Et affichage à l'écran
        }
     
        // Fermeture du fichier
        fclose(file1) ;
     
        return EXIT_SUCCES ;
    }
    Et idem pour l'écriture d'un fichier mais avec "w+" et fputs(..)


    tu ne rembobines pas ton fichier avant de le lire
    Quand tu écris dans un fichier, le pointeur de fichier possède un index sur le dernier caractère de ton fichier. Si tu veux lire ton fichier, il faut positionner cet index en début de ton fichier. Pour cela on utilise la fonction fseek.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fseek(file1, SEEK_SET, 0) ;
    Bon continuation.

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par Kouamé josué Voir le message
    Quand j'éxecute voici qui s'affiche dans la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     LECTURE DU FICHIER 
    		 -------Fonction Afficher-------
    Erreur de segmentation (core dumped)
    Ça n'est pas étonnant et ça ne te donne pas de précision sur l'origine de l'erreur. C'est pourquoi je t'ai conseillé de coder par étapes, un morceau du problème à chaque fois.


    Citation Envoyé par Kouamé josué Voir le message
    Je ne comprends vos commentaires :

    Car dans la documentation il est ecrit
    r+’ Open an existing file for both reading and writing. The initial contents
    of the file are unchanged and the initial file position is at the beginning
    of the file.
    Moi je voudrais ecrire dans un fichier que je crée et que j'affiche le contenu.
    "r+" exige que le fichier existe. Tu le saurais si tu vérifiais la valeur de retour de fopen. C'est donc "w+" ou "a+" qu'il te faut.


    Citation Envoyé par Kouamé josué Voir le message
    Ça auusi je ne comprends pas
    tu ne rembobines pas ton fichier avant de le lire
    Lire ou écrire dans un fichier altère un « curseur » qui décrit une position dans la séquence de données. Par analogie tu peux voir ça comme une tête de lecture qui se déplace sur une bande magnétique. Ici lorsque tu crées ton fichier vide le curseur pointe au début, à la position 0 :
    Après ton opération d'écriture, le curseur pointe à la fin du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Votre fichier est dans votre main.\n Gardez la peche...
                                                           ^
                                                           56
    Avant de lire ce que l'on vient d'écrire, il faut « rembobiner la bande » avec rewind pour obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Votre fichier est dans votre main.\n Gardez la peche...
    ^
    0

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 120
    Par défaut
    Après vos conseils, j'ai apporté des modifications au code et cette fois-ci c'est ok,
    le 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
    39
    40
    41
    #include <stdio.h>
    #include <stdlib.h>
     
     void afficher(FILE *fichier);
     
    int main(int argc, char **argv)
    {    
    	FILE *file1;
     
         file1 =fopen("text", "r") ; //le fichier 'text' a deja un contenu 
     
          if(file1 !=NULL){
    		   printf(" LECTURE DU FICHIER \n"); 
    		   afficher(file1) ; // appel de la fonction pour la lecture du fichier
     
           fclose(file1); 
          }
         else{
    		  printf("Erreur d'ouverture du fichier \"text\".\n") ;
    	  }
     
    	return 0;
     
      } 
     
     
     /** fonction de traitement  flux **/
    void afficher(FILE *fichier	){
     
    	 int car ;
     
    	 do{
    		car =fgetc(fichier); 
    		printf("%c",car) ;
     
    	}while(car != EOF) ;	 
     
    		printf("\t--------FIN FU FICHIER-------\n");
     
       return;
    }
    Si je veux ecrire dans le fichier et le lire je dois suivre l'exemple donné sur le lien rewind proposé par
    Matt_Houston
    Mon problème est résolu.
    Merci de vos aides.

  7. #7
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Hé oh, c'est pas terminé ! Et la gestion d'erreur ? Il n'y a pas que l'appel à fopen qui peut foirer, lis bien la doc de fgetc - en particulier la partie qui mentionne feof et ferror - et allez, au boulot.

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kouamé josué Voir le message
    Après vos conseils, j'ai apporté des modifications au code et cette fois-ci c'est ok,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void afficher(FILE *fichier	){
     
    	 int car ;
     
    	 do{
    		car =fgetc(fichier); 
    		printf("%c",car) ;
     
    	}while(car != EOF) ;	 
     
    		printf("\t--------FIN FU FICHIER-------\n");
     
       return;
    }
    Bonjour

    Pas tout à fait ok car tu affiches aussi la valeur EOF alors que celle-ci n'est pas dans le fichier...
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void afficher(FILE *fichier){
     
    	int car ;
    	while ((car=fgetc(fichier)) != EOF)
    		printf("%c",car) ;
     
    	printf("\t--------FIN FU FICHIER-------\n");
    }
    Et essaye d'écrire un peu "propre" stp (indentation, aération intelligente, etc) !!!

    Citation Envoyé par Kouamé josué Voir le message
    Si je veux ecrire dans le fichier et le lire je dois suivre l'exemple donné sur le lien rewind proposé par
    Matt_Houston
    Le rewind() sert à revenir au début du fichier. Mais si tu veux un positionnement plus fin, t'as fseek() qui te permet de te placer où tu veux. A noter aussi que si tu écris et que tu lis en même temps, tu dois impérativement finaliser tes opérations d'écriture via fflush() avant toute lecture.
    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]

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

Discussions similaires

  1. Affichage du contenu d'un fichier
    Par developppez dans le forum C
    Réponses: 6
    Dernier message: 22/04/2006, 22h10
  2. probléme d'affichage du contenu d'un fichier
    Par developppez dans le forum C
    Réponses: 2
    Dernier message: 20/04/2006, 19h16
  3. Réponses: 5
    Dernier message: 20/03/2006, 12h35
  4. Réponses: 1
    Dernier message: 22/12/2005, 15h45
  5. affichage du contenu d'un fichier texte
    Par axel-erator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/08/2005, 16h06

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