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 :

Récupérer le contenu d'un fichier texte et le copier dans une chaine


Sujet :

C

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut Récupérer le contenu d'un fichier texte et le copier dans une chaine
    Bonjour,
    Donc voila Fgets ne marche plus a chaque fois que j'exécute tout s'arrête pourquoi??
    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
    void Copy_NewMsg_In_File (Message *msg)
    {
    	FILE *f = NULL;
    	FILE *fc = NULL;
    	f = fopen("C:\\glomosim\\glomosim\\network\\DataPacket.txt", "wb");
    	if (f == NULL)
        {
    		printf("Impossible d'ouvrir le fichier DataPacket.txt");
        }
        else
        {
    		fprintf(f, "%s", msg->packet);
    		printf("\n avant packet = %s\n", msg->packet); 
    		main_LZW();
    		fc = fopen("C:\\glomosim\\glomosim\\network\\test.out", "rb");
    		if (fc == NULL)
    		{
    			printf("Impossible d'ouvrir le fichier test.out");
    		}
    		else
    		{
    			fgets(msg->packet, 100, fc);
    //packet est de type char*
                        //peut être parce que fc  contient moins que 100 caractères!! 
    			fclose(fc);
    		}	
    		fclose(f);
        }//else
       printf("\n packet = %s\n", msg->packet);// ici il affiche packet= 
                                                              //et hop tout s'arrête
    }
    S.V.P,
    si seulement vous me dite ou se trouve l'erreur
    merci d'avance

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Il faudrait en poster plus. Par exemple, la declaration de la structure Message...

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

    Il y a des contradictions dans ton code : les fichiers sont ouverts en mode binaire ("rb" et "wb") mais tu y accèdes avec des fonctions texte : fprintf et fgets.

    Il faut soit ouvrir en texte pour utiliser ces fonctions, soit rester en binaire, mais utiliser fread, fwrite pour travailler avec les fichiers.

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Il faut soit ouvrir en texte pour utiliser ces fonctions, soit rester en binaire, mais utiliser fread, fwrite pour travailler avec les fichiers.
    Voila aprés avoir fait les modifications necessaire j'ai toujours le même probleme
    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
    void Copy_NewMsg_In_File (Message *msg)
    {
    	FILE *f = NULL;
    	FILE *fc = NULL;
    	long lSize;
    	size_t result;
    	char *MyPacket;
    	f = fopen("C:\\glomosim\\glomosim\\network\\DataPacket.txt", "wb");
    	if (f == NULL)
        {
    		printf("Impossible d'ouvrir le fichier DataPacket.txt");
        }
        else
        {
     
    		//fprintf(f, "%s", msg->packet);
    		fwrite (msg->packet , 1 , sizeof(msg->packet) , f );
    		printf("\n avant packet = %s\n", msg->packet); 
    		main_LZW();
    		fc = fopen("C:\\glomosim\\glomosim\\network\\test.out", "rb");
    		if (fc == NULL)
    		{
    			printf("Impossible d'ouvrir le fichier test.out");
    		}
    		else
    		{
     
     
    			fseek (fc , 0 , SEEK_END);
    			lSize = ftell (fc);
    			rewind (fc);
     
     
    			MyPacket = (char*) malloc (sizeof(char)*lSize);
    			if (MyPacket == NULL) {fputs ("Memory error",stderr); exit (2);}
     
     
    			result = fread (MyPacket,1,lSize,fc);
    			if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
     
    			//fgets(msg->packet, 10, fc);
    			fclose(fc);
     
    		}	
    		fclose(f);
     
        }//else
       printf("\n MyPacket = %s\n", MyPacket); // On affiche la chaîne
    }

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Flob91 Voir le message
    Il faudrait en poster plus. Par exemple, la declaration de la structure Message...
    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
    struct message_str {
        short layerType;    
        short protocolType;
        short instanceId;    
        short eventType; 
        BOOL error;
        char* info;
        int infoSize;
        double smallInfoSpace[SMALL_INFO_SPACE_SIZE / sizeof(double)];
        int packetSize;
        char* packet;
        char* payLoad;
        int payLoadSize;
        clocktype packetCreationTime;  
    };

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    EDIT
    As tu vérifié la valeur de "sizeof(msg->packet)" ?
    Tu peux remplacer sizeof(msg->packet) par strlen(msg->packet) : sizeof(msg->packet) va te renvoyer le taille du pointeur packet, pas la taille de la chaine de caractère.
    /EDIT

    Sinon, que te renvoie ton programme comme message ? As tu essayé d'utiliser un débogueur pour faire un exécution pas à pas.

  7. #7
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par mabu Voir le message
    EDIT
    As tu vérifié la valeur de "sizeof(msg->packet)" ?
    Tu peux remplacer sizeof(msg->packet) par strlen(msg->packet) : sizeof(msg->packet) va te renvoyer le taille du pointeur packet, pas la taille de la chaine de caractère.
    /EDIT
    sizeof (msg->packe)=4

    strlen(msg->packet) =4

    La taille du file fc =1

    sizeof (MyPacket)=4

    strlen(MyPacket) =1 // j'ai ouvert le fichier fc et il contient un seul caractère ÿ mais il ne l'affiche pas

    Citation Envoyé par mabu Voir le message
    EDIT
    [COLOR="Gray"]Sinon, que te renvoie ton programme comme message ? As tu essayé d'utiliser un débogueur pour faire un exécution pas à pas.
    /EDIT
    le message est le programme a cesser de fonctionner et il m'invite a déboguer je le fait, mais la comprend rien avec le langage machine

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Voici comment j'ai testé ton code chez moi :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct message_str {
        char *packet;
    } Message;
     
    void test(Message * msg)
    {
        FILE *f = NULL;
        FILE *fc = NULL;
        long lSize;
        size_t result;
        char *MyPacket;
        f = fopen("DataPacket.txt", "wb");
        if (f == NULL) {
            printf("Impossible d'ouvrir le fichier DataPacket.txt");
        } else {
            /* remplacement sizeof par strlen */
            fwrite(msg->packet, 1, strlen(msg->packet), f);
            printf("\n avant packet = %s\n", msg->packet);
            fc = fopen("test.out", "rb");
            if (fc == NULL) {
                printf("Impossible d'ouvrir le fichier test.out");
            } else {
     
                fseek(fc, 0, SEEK_END);
                lSize = ftell(fc);
                rewind(fc);
     
                /* +1 pour laisser la place pour le \0 final*/
                MyPacket = (char *) malloc(sizeof(char) * lSize + 1);
                if (MyPacket == NULL) {
                    fputs("Memory error", stderr);
                    exit(2);
                }
     
                result = fread(MyPacket, 1, lSize, fc);
                if (result != lSize) {
                    fputs("Reading error", stderr);
                    exit(3);
                }
                /* ajout du \0 final*/
                MyPacket[lSize] = '\0';
                fclose(fc);
     
            }
            fclose(f);
     
        }                           
        printf("\n MyPacket = %s\n", MyPacket);     // On affiche la chaîne
    }
     
    int main(void)
    {
        Message MSG;
        MSG.packet = strdup("Bonjour le monde");
        test(&MSG);
        free(MSG.packet);
     
        return 0;
    }
    Voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     avant packet = Bonjour le monde
    Impossible d'ouvrir le fichier test.out
     MyPacket = Bonjour le monde
    et une fois que le fichier test.out est en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     avant packet = Bonjour le monde
     
     MyPacket = Bonjour le monde

  9. #9
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Pour le problème du programme qui s'arrête c'est bon c'est résolu, effectivement le débogueur m'a aider a trouver ou était l'erreur, j'ai bien ouvert mes yeux cette fois ci
    Merci mabu.
    Mais pour l'affichage du contenu de MYPACKET c'est toujours rien
    voila ce que j'ai à chaque fois
    MYpacket=
    pourquoi il n'affiche rien il ne reconnait pas le caractère??
    et pourtant sa taille est bien 1 Octet

  10. #10
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par nawal.02 Voir le message
    pourquoi il n'affiche rien il ne reconnait pas le caractère??
    et pourtant sa taille est bien 1 Octet
    MyPacket ne se termine pas par un '\0' donc, l'affichage peut faire n'importe quoi.

    Regarde ce que j'ai commenté, cela pourra peut-être t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* +1 pour laisser la place pour le \0 final*/
                MyPacket = (char *) malloc(sizeof(char) * lSize + 1);
               [...]
                /* ajout du \0 final*/
                MyPacket[lSize] = '\0';

  11. #11
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par mabu Voir le message
    MyPacket ne se termine pas par un '\0' donc, l'affichage peut faire n'importe quoi.

    Regarde ce que j'ai commenté, cela pourra peut-être t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* +1 pour laisser la place pour le \0 final*/
                MyPacket = (char *) malloc(sizeof(char) * lSize + 1);
               [...]
                /* ajout du \0 final*/
                MyPacket[lSize] = '\0';
    j'ai fait exectement comme vous, et toujours rien alors vous m'avez donner une idée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyPacket[lSize] = '\0';
    donc j'ai fait
    et le resultat est MyPacket= t
    un espace aulieu de ÿ !!!!!

  12. #12
    Invité(e)
    Invité(e)
    Par défaut
    Ah mais oui, le caractère 'ÿ' ne doit pas être affichable en ASCII standard.
    Essaye avec un autre fichier.

    voir la fonction isgraph (ctype.h)

  13. #13
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par mabu Voir le message
    Ah mais oui, le caractère 'ÿ' ne doit pas être affichable en ASCII standard.
    Essaye avec un autre fichier.

    voir la fonction isgraph (ctype.h)
    J'ai essayé toutes les fonctions de ctype.h et le résultat est toujours nul .
    Cela veut dire que l'affichage n'est pas évident mais le caractère est belle et bien existant??

  14. #14
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par nawal.02 Voir le message
    J'ai essayé toutes les fonctions de ctype.h et le résultat est toujours nul.
    Non, la fonction isgraph permet de savoir si un caractère est imprimable ou non.
    isgraph('ÿ') renvoie 0, ce caractère n'est pas imprimable.

  15. #15
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    80
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 80
    Points : 55
    Points
    55
    Par défaut
    Vraiment un grand merci pour votre aide,
    MERCI

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

Discussions similaires

  1. Récupérer le contenu d'un fichier texte dans une variable
    Par heureactuelle dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/05/2008, 15h10
  2. Réponses: 2
    Dernier message: 10/09/2007, 19h03
  3. Réponses: 10
    Dernier message: 10/02/2007, 18h44
  4. Lire un fichier Texte d'1 bloc dans une chaine
    Par User dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2006, 21h56
  5. Comment récupérer le contenu de plusieurs fichiers textes ?
    Par calimero2611 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 15h45

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