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 :

Afficher le contenu d'un fichier ligne par ligne


Sujet :

C

  1. #1
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut Afficher le contenu d'un fichier ligne par ligne
    Bonsoir,

    2heures que j'essaye...en vain, impossible d'afficher TOUTES les lignes qui sont dans un fichier "test.txt", qui contient par exemple :

    brian is
    in the
    kitchen

    Une idée? :s J'ai réussi à afficher soit juste la première ligne, soit la deuxième et la troisième...et quand je rajoute une quatrième, la troisième ne s'affiche plus, bref c'est le bordel >.>

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

    Déjà, les fonctions nécessaires :

    • Pour ouvrir le fichier : fopen, fclose
    • Pour lire ligne par ligne : fgets, puts
    • Pour lire caractère par caractère : fgetc, putchar.


    Peux tu poster ce que tu as fait jusqu'ici ?

  3. #3
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Voila la boucle avec la quelle je lis le fichier et tente d'en afficher le contenu...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(fgets(ligne, 80, fichier) != NULL)
    {
                fgets(ligne, 80, fichier)
                printf("%s", ligne);
    }

    Et si j'ai un fichier texte qui contient :
    brian
    is in
    the kitchen
    test
    blabla
    123
    456

    Il m'affiche :
    http://www.hostingpics.net/viewer.ph...Sans_titre.jpg

    Certaines lignes "disparaissent"...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Chaque fois que fgets est appelé, une ligne est lue dans le fichier.
    La ligne lue par le fgets appelé dans la commande while n'est donc jamais affichée.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Bien oui, c'est normal. Tu fais deux fgets successifs à chaque fois. Du coup, il y a une ligne qui passe à la trappe en permanence.

  6. #6
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Effectivement...ca marche, merci à tous!!

  7. #7
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par mailbox Voir le message
    Voila la boucle avec la quelle je lis le fichier et tente d'en afficher le contenu...


    <...>
    Dernière modification par mailbox ; Aujourd'hui à 22h54.
    Pourquoi tu as supprimé le code ? cela rend tout simplement ce file de discussion inutile ! j'appelle cela de l'égoïsme tu ne mérites pas l'aide que tu viens de recevoir...

  8. #8
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Parce que c'était un peu ridicule >> Je l'ai remis quand même...

  9. #9
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Me revoilà, j'aimerai stocker la ligne du fichier dans un tableau j'ai donc écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(fgets(ligne, TAILLE_MAX, fichier) != NULL)
    {
            printf("%s", ligne);
            strcpy(tableau[i],ligne);
            i++;
    }

    Je compile, et quand je le run :
    http://www.hostingpics.net/viewer.php?id=318308abc.jpg

    J'ai déclaré le tableau et la ligne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char ligne[80];
    char tableau[80];

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    tableau est un tableau de char, donc tableau[i] est un char. strcpy() n'attend pas un char mais l'adresse de début d'un tableau de char !

    - On peut envisager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char tableau[NLIGNES][80];
    où NLIGNES est le nombre maximum de lignes du fichier qu'on peut stocker

    Normalement, on devrait alors avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while(fgets(ligne, TAILLE_MAX, fichier) != NULL && i <NLIGNES)
    ...
    - Pourquoi ces 80 alors que tu as défini une macro TAILLE_MAX ?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(tableau[i],ligne);
    Il faut supprimer ce qui est en rouge. C'est l'adresse du tableau qu'il faut envoyer à la fonction, pas la valeur du premier élément, qui est un entier mais qui sera considéré comme une adresse... et qui provoquera donc un crash.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(tableau[i],ligne);
    Il faut supprimer ce qui est en rouge. C'est l'adresse du tableau qu'il faut envoyer à la fonction, pas la valeur du premier élément, qui est un entier mais qui sera considéré comme une adresse... et qui provoquera donc un crash.
    Sauf que tableau ne devrait pas être un tableau de caractères, mais un tableau de lignes.
    La bonne réponse c'est celle de diogene.

  13. #13
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    J'ai donc fait comme tu l'as écrit diogene, en rajoutant le [NLIGNE] dans la déclaration du tableau et ça marche! J'ai un peu de mal a saisir pourquoi mais bon...C'est fou comme on peut rester des heures bloque sur pas grand chose au final quand on debute. Encore merci!

  14. #14
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Chaque ligne fait plusieurs char : tu dois stocker chaque ligne dans un tableau de char.
    Le fichier fait plusieurs lignes : tu dois stocker le fichier dans un tableau de lignes
    Comme chaque ligne est un tableau de char, il te faut un tableau de tableau de char.

  15. #15
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par diogene Voir le message
    Chaque ligne fait plusieurs char : tu dois stocker chaque ligne dans un tableau de char.
    Le fichier fait plusieurs lignes : tu dois stocker le fichier dans un tableau de lignes
    Comme chaque ligne est un tableau de char, il te faut un tableau de tableau de char.
    Donc avec : char tableau[NLIGNES][80];

    Si le fichier contenait :
    blabla
    abc
    def

    Ca voudrait dire que :
    tableau[2][3]= 'c' ?

  16. #16
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    blabla
    abc
    def

    tableau[2][3]= 'c' ?
    Non, les indices commençant à 0 et non pas à 1, tableau[1][2]== 'c'

  17. #17
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par diogene Voir le message
    Non, les indices commençant à 0 et non pas à 1, tableau[1][2]== 'c'
    Ok j'ai compris, mais donc si je veux afficher tableau[1][2], je fais :
    printf("%s", tableau[1][2]); ?

    Et là Xcode se fache et me sort :
    warning: format '%s' expects type 'char *', but argument 2 has type 'int'

    Et il ne l'affiche pas >.< Du coup impossible pour moi de manipuler une "case" de ce fichier, j'arrive bien à travailler sur les lignes avec tableau[i], par exemple :
    printf("%s",tableau[i]);

    Là il m'affiche la ligne, mais si je rajoute le tableau[][], il ne veut pas afficher le caractère qui correspond dans la ligne

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Pour afficher un caractère, il faut utiliser %c et non %s. Tout ceci est écrit dans le man de printf. ^^

  19. #19
    Membre habitué Avatar de mailbox
    Profil pro
    Inscrit en
    Février 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 140
    Points : 159
    Points
    159
    Par défaut
    Effectivement Je le sais en plus...J'avais du relire le cours pour voir qu'il fallait un %s pour afficher toute la ligne à la place de mon %c ^^ Mais deux jours avec que des %s...j'ai fait une fixation dessus

    Re-re merci^^

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 19h08
  2. Opération sur un fichier et lecture ligne par ligne
    Par teunniq dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/06/2014, 18h57
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 19h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 11h44
  5. Réponses: 6
    Dernier message: 24/05/2008, 23h22

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