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 :

Lecture d'un fichier et liste chainée


Sujet :

C

  1. #1
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut Lecture d'un fichier et liste chainée
    BOnjour à tous les developpeurs ici présents, j'ai un soucis;
    Bon je developpe une application en C;
    Je veux lire un fichier qui contien N lignes,
    je veux parcourir le fichier ligne par ligne et stocker chaque mot dans une liste chainé tout en stockant la position du mot et le numero de la ligne.
    merci*
    je compte sur vous enormement.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    on veut bien t'aider, mais montre-nous ce que tu as fais..

    On ne fera pas a ta place. On est juste ici pour t;aider.

    Alors montre

  3. #3
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut Re
    Oui merci,
    mais je me bloke des le depart
    je c pas comment parcourir un fichier ligne apr ligne et extraire chaque mot.
    merci si vous maidez car c urgent
    merci

  4. #4
    Membre confirmé Avatar de LeBelge63
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Par défaut
    Google est ton ami pour la départ.

  5. #5
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut extraire les mots
    Bonsoir à tous,
    jai un fichier a le parcourir ligne par ligne, j'aime extraire les mots constituants chaque ligne tout en enregistrant leurs positions et le numero de la ligne.
    merci

  6. #6
    Membre confirmé Avatar de LeBelge63
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Par défaut
    Citation Envoyé par souviron34 Voir le message


    on veut bien t'aider, mais montre-nous ce que tu as fais..

    On ne fera pas a ta place. On est juste ici pour t;aider.

    Alors montre
    Tout est dans le message

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Pour lire un fichier ligne par ligne, tu peux utiliser fgets().

    Il faut avant tout definir ce que c' est qu' un mot:
    • des groupes de lettres separés par des espaces

    • des groupes de lettres separés par des espaces et les signes de ponctuation ...


    Apres ces definitions, le travail est à moitié fini. Il te faut donc suivre l' algorithme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (!feof(fichier))
    {
    // lire la ligne avec fgets()
    //extraire les mots de la chaine en fonction de la definition d' un mot
    //stocker les mots dans un tableau ou une liste chainnée ou ... 
    }

  8. #8
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut merci
    Mais par quelle instruction on definit les mots: jai le cas que les mots un ensemble de lettre separes par un espace.
    merc

  9. #9
    Membre émérite 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
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Pour lire un fichier ligne par ligne, tu peux utiliser fgets().

    Il faut avant tout definir ce que c' est qu' un mot:
    • des groupes de lettres separés par des espaces

    • des groupes de lettres separés par des espaces et les signes de ponctuation ...


    Apres ces definitions, le travail est à moitié fini. Il te faut donc suivre l' algorithme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (!feof(fichier))
    {
    // lire la ligne avec fgets()
    //extraire les mots de la chaine en fonction de la definition d' un mot
    //stocker les mots dans un tableau ou une liste chainnée ou ... 
    }
    Mauvais exemple !
    Comment détecter une fin de fichier ?

  10. #10
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    lis chaque ligne de ton fichier avec fgets et tant qu' elle ne retourne pas NULL continue...

    fgets te renvoie "un pointeur sur la zone memoire" contenant la ligne nouvellement lue.

    decoupe cette ligne en fonction d'un caractere de separation (espace par exemple ) tant que tu ne rencontre pas le caractere '\0'.

    A chaque debut de ligne et a chaque recnontre du caractere de separation il faut que tu te crées un nouvelle structure car tu viens de renconter un nouveau mot.

    Mais il existe une solution de simplicté ... c'est de mettre un mot par ligne ... du coup plus de decoupage de ligne !!!

  11. #11
    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 darrylsite Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (!feof(fichier))
    {
    // lire la ligne avec fgets()
    Merci de ne pas induire les débutants en erreurs. Garde tes fautes pour toi... (ou essaye de les corriger...)

    feof() ne fait pas ce que tu crois...

    http://emmanuel-delahaye.developpez....s.htm#fichiers

  12. #12
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Pour lire un fichier ligne par ligne, tu peux utiliser fgets().

    Il faut avant tout definir ce que c' est qu' un mot:
    • des groupes de lettres separés par des espaces

    • des groupes de lettres separés par des espaces et les signes de ponctuation ...


    Apres ces definitions, le travail est à moitié fini. Il te faut donc suivre l' algorithme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (!feof(fichier))
    {
    // lire la ligne avec fgets()
    //extraire les mots de la chaine en fonction de la definition d' un mot
    //stocker les mots dans un tableau ou une liste chainnée ou ... 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (fgets(chaine,taille,fichier)>0)
    {
    //extraire les mots de la chaine en fonction de la definition d' un mot
    //stocker les mots dans un tableau ou une liste chainnée ou ... 
    }

  13. #13
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut test
    Merci à tous les developpeurs qui m'ont aidé .
    Donc voilà ce que j'ai réalisé comme travail: le but est d'extraire les mots des differentes lignes d'un fichier texte, mais le probleme c'est que le programme n'affiche que les mots de la derniere ligne.
    J'ai refléchi trop sur ce point surtout sur la foonction d'extraction des mots mais j'ai pas réussi à localiser le probleme.
    Voila mon bout de code espérant que vous allez me trouvez une soultion :


    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>
    #include<string.h>
    #define TAILLEMAX 1000   //tableau de taille 1000
     
    int main(int argc, char *argv[])
    {
        FILE* fichier =NULL;
        char chaine [TAILLEMAX ]=" "; // chaine vide de taille TAILLEMAX 
        fichier =fopen("test.txt","r");
        if (fichier !=NULL)
         {
            while(fgets(chaine,  TAILLEMAX , fichier)!=NULL;
          }  //on lit maximum TAILLEMAX  caractere du fichier , on stoke le    tout dans "chaine" 
     
     
      printf("%s", chaine); //on affiche la chaine
    }
    fclose (fichier);
    return0;
    }
     
    void Affiche_mot (char* s)
    {
      if(s!=NULL)
        {
           int length=strlen(s);
           int i =0;
           while(i<length)
                {
                   if(s[i]!= ' ' &&s[i]!='\n')
                  {
                     printf("%c", s[i]);
                   ]
                  else
                   printf("\n");
                   i++;
             }
    }
    }
    MErci

  14. #14
    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 cyrine Voir le message
    Donc voilà ce que j'ai réalisé comme travail:
    Ne compile 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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:13: error: syntax error before ';' token
    main.c: At top level:
    main.c:6: warning: unused parameter 'argc'
    main.c:6: warning: unused parameter 'argv'
    main.c:19: warning: type defaults to `int' in declaration of `fclose'
    main.c:19: warning: parameter names (without types) in function declaration
    main.c:19: warning: data definition has no type or storage class
    main.c:20: warning: type defaults to `int' in declaration of `return0'
    main.c:20: warning: data definition has no type or storage class
    main.c:21: error: syntax error before '}' token
    main.c: In function `Affiche_mot':
    main.c:34: error: syntax error before ']' token
    main.c:40:2: warning: no newline at end of file
    main.c:40: error: syntax error at end of input
    Process terminated with status 1 (0 minutes, 2 seconds)
    4 errors, 8 warnings
    Il faut absolument apprendre à faire du copié/collé... Je suppose que tu veux ça :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    /* tableau de taille 1000 */
    #define TAILLEMAX 1000
     
    void Affiche_mot (char *s)
    {
       if (s != NULL)
       {
          int length = strlen (s);
          int i = 0;
          while (i < length)
          {
             if (s[i] != ' ' && s[i] != '\n')
             {
                printf ("%c", s[i]);
             }
             else
                printf ("\n");
             i++;
          }
       }
    }
     
    int main (void)
    {
       FILE *fichier = NULL;
    /* chaine vide de taille TAILLEMAX */
       char chaine[TAILLEMAX] = " ";
       fichier = fopen ("test.txt", "r");
       if (fichier != NULL)
       {
    /* on lit maximum TAILLEMAX  caractere du fichier , on stoke le
       tout dans "chaine" */
          while (fgets (chaine, TAILLEMAX, fichier) != NULL)
          {
    /* on affiche la chaine */
             printf ("%s", chaine);
          }
       }
       fclose (fichier);
       return 0;
    }
    Attention, fclose() ne doit se faire que sur un fichier ouvert, sinon le comportement est indéterminé (chez moi, gros crash...)

    Autre gag, tu n'appelles jamais Affiche_mot()...

  15. #15
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut Re
    Merci Emmanuel pour votre reponse;
    mais moi j'ai compilé ce code et ca marche: 0 erreur et 0 warning rien qu'il n'affiche que les mots de la derniere ligne.
    merci

  16. #16
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut Re
    Je pense pas que tes remarque ont une influence sur le resultat inattendu du code. je pense que c'était pas ca le probleme.

  17. #17
    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 cyrine Voir le message
    mais moi j'ai compilé ce code et ca marche: 0 erreur et 0 warning
    Merci de ne pas insulter mon intelligence, ... ni celle de mon compilateur. Je vois très bien que tu as recopié le code à la main n'importe comment et qu'il ne compile pas. Alors cesse de dire et de poster n'importe quoi et apprends à faire du copié/collé, ça nous évitera de perdre notre temps en corrections inutiles ...

    Et aussi, donne un exemple de fichier de données à traiter...

  18. #18
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut explication
    Oui c'est vrai que j'ai pas fait du copier/coller car je travaille sur une machine virtuelle.

  19. #19
    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 cyrine Voir le message
    Oui c'est vrai que j'ai pas fait du copier/coller car je travaille sur une machine virtuelle.
    Le boulot que je fais pour remettre ton code en ordre, il est pas virtuel...

  20. #20
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut Re
    Le boulot que je fais pour remettre ton code en ordre, il est pas virtuel...
    Merci pour ton effort, mais le probleme c'est qu'il m'affiche seulement la derniere ligne du fichier texte.
    t'as une idée s'il te plait?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Stocker dans fichier des listes chainées
    Par sisiniya dans le forum C
    Réponses: 7
    Dernier message: 26/03/2010, 21h10
  2. Réponses: 1
    Dernier message: 16/03/2010, 09h58
  3. fichier plus liste chainé
    Par Warfdog dans le forum Débuter
    Réponses: 2
    Dernier message: 18/11/2009, 15h25
  4. fichier et liste chainée
    Par seifdev dans le forum C
    Réponses: 4
    Dernier message: 23/04/2007, 02h08
  5. Réponses: 3
    Dernier message: 30/03/2007, 18h03

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