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 lecture de fichiers


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut problème avec lecture de fichiers
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    int lire_clavier(char *str, int taille)
    {
        int i;
        fgets(str, taille, stdin);
        str[taille-1] = '\0';
        for(i=0; str[i]; i++) /*supprime le retour chariot */
        {
            if(str[i] == '\n')
            {
                str[i] = '\0';
                break;
            }
        }
        return(i); /* Renvoir 0 si la chaine est vide*/
    }
     
    int main()
    {
        FILE *fp;
        char filename[100];
     
        printf("Nom du fichier a lire : ");
        lire_clavier( filename, sizeof(filename) );
     
        if((fp = fopen(filename, "r")) == NULL)
        {
            fprintf(stderr, "\nErreur lors de l'ouverture du fichier...\n");
            exit(EXIT_FAILURE);
        }
        else
        {
            char infile[sizeof(fp)+1];
     
            printf("\n\n");
            fgets(infile, sizeof(fp), fp);
            fprintf(stdout, "%s", infile);
            printf("\n\n");
            fclose(fp);
            printf("\nPour quitter tappez sur une touche du clavier.\n");
            getch();
            exit(EXIT_SUCCESS);
        }
        return 0;
    }
    Le programme s'execute mais seulement les 3 premiere lettre du .txt s'affiche

    pouvez vous m'aider
    merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            char infile[sizeof(fp)+1];
     
            fgets(infile, sizeof(fp), fp);
    Hello,

    sizeof() est un mot-clé du C, pas une fonction. Et même dans ce cas, cela ne te donnerait pas la taille de ton fichier, puisque ce n'est pas une ressource déjà chargée en mémoire.

    Ce que tu fais ici, c'est demander la taille de fp, lequel est un pointeur sur une structure de type FILE. Un pointeur, sur les machines 32 bits, fait 4 octets. Si c'est la taille que tu donnes à ton buffer et que tu réserves un octet pour le '\0' final, il te reste tout juste de la place pour les trois premiers caractères.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    Le programme s'execute mais seulement les 3 premiere lettre du .txt s'affiche
    En complément, ta saisie est peu orthodoxe et inutilement complexe. Ceci fonctionne :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int lire_clavier (char *str, int taille)
    {
       int err;
       fgets (str, taille, stdin);
       {
          /* search */
          char *p = strchr (str, '\n');
          if (p != NULL)
          {
             /* kill */
             *p = '\0';
             err = 0;
          }
          else
          {
             /* purge */
             int c;
             while ((c = getchar ()) != '\n' && c != EOF)
             {
             }
             err = 1;
          }
       }
       return err;                  /* Renvoie 0 si la chaine est vide */
    }
     
    int main (void)
    {
       int ret;
       char filename[100];
     
       printf ("Nom du fichier a lire : ");
       lire_clavier (filename, sizeof (filename));
       {
          FILE *fp = fopen (filename, "r");
          if (fp == NULL)
          {
             fprintf (stderr, "\nErreur lors de l'ouverture du fichier...\n");
             ret = EXIT_FAILURE;
          }
          else
          {
             char infile[128];
     
             printf ("\n\n");
             fgets (infile, sizeof infile, fp);
             fprintf (stdout, "%s", infile);
             printf ("\n\n");
             fclose (fp);
     
     
             ret = EXIT_SUCCESS;
          }
       }
       return ret;
    }
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut
    Ce programme execute bien la totalité de n'importe quel fichier .txt??

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    Ce programme
    Quel programme ?
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut

    et bien celui que tu as posté ^^

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    et bien celui que tu as posté
    Et comment je peux le deviner ? Tu n'as pas fait de citation...

    Il ne lit qu'une ligne de texte. C'est pas évident ?
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut
    Il ne lis pa que les 128 premier caractéres???

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    Il ne lis pa que les 128 premier caractéres???
    Pour être plus précis, il lit une ligne de texte qui peut faire de 0 à 127 caractères, '\n' compris.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut
    et si je fait sous cette forme???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int taille_fp;
     
    taille_fp = sizeof( (char)fp);
    fgets(infile, taille_fp, fp);
    et sinon comment faire en sorte pour récuperer le nombres de caractère inclus dans le fichier????

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    et si je fait sous cette forme???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int taille_fp = sizeof( (char)fp);
    Non, ça n'a aucun sens. sizeof sert à mesurer la taille des objets en mémoire de donnée. Rien à voir avec un fichier...
    et sinon comment faire en sorte pour récuperer le nombres de caractère inclus dans le fichier????
    fseek() / ftell (), ou alors on s'en passe en écrivant du code 'automatique' : allocation dynamique à la volée (realloc() d'un tableau de pointeurs, liste chainée etc.

    Mais est-ce bien nécessaire ? Tu veux charger tout le fichier en mémoire ? Pourquoi faire ?
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut
    en fait pour rien
    c'est juste pour savoir comment faire ^^

Discussions similaires

  1. Problème avec lecture de fichier
    Par anthonyplay dans le forum Débuter
    Réponses: 7
    Dernier message: 23/11/2009, 21h50
  2. Réponses: 4
    Dernier message: 19/09/2008, 10h04
  3. Problème de lecture de fichier .txt avec Flash
    Par cdevl32 dans le forum Flex
    Réponses: 0
    Dernier message: 25/05/2008, 17h35
  4. Problême avec lecture tous fichier Vista
    Par babeth38 dans le forum Windows Vista
    Réponses: 4
    Dernier message: 03/04/2008, 09h06
  5. [DOM4J] Problème de lecture de fichier xml avec dom4j
    Par santana2006 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/04/2006, 16h52

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