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 Fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut Lecture Fichier
    Bonjour à tous !!!
    Un problème s'oppose à moi. Je voudrais savoir comment faire pour lire aléatoirement un mot dans un fichier (dico.txt) puis le stocker par la suite dans un tableau.
    En revanche, j'arrive très bien à lire le fichier grace à la fonction : fgetc (fichier).
    Merci...

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Que veux-tu dire par lire aléatoirement un mot dans un fichier? Pour lire une ligne tu as fgets. Pour aller à la ligne n (ligne 0 = première ligne) tu vas au début du fichier puis fais fgets n fois (en supposant qu'un ton buffer est assez large pour contenir n'importe quelle ligne). Que demande le peuple?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut
    C'est vrai. Mais, en fait, je croyais que fgets, s'était uniquemenent pour récupérer des valeurs dans un fichier.
    Je vais voir ce que ça donne.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Si tu souhaite vraiment lire de manière aléatoire,
    regarde du coté de fseek (se positionner à un endroit quelconque)et ftell.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut
    C'est quoi fseek et ftell. Moi, je connais uniquement srand.
    En fait, ce que je comptais faire, c'est de choisir un ligne aléatoire
    puis, de relever le mot dans un tableau.
    Parce que, après, je dois mélanger les lettres, mais, c'est beaucoup plus simple une fois qu'il est dans le tableau.
    Voila

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    En fait, ce que je comptais faire, c'est de choisir un ligne aléatoire
    puis, de relever le mot dans un tableau.
    Voilà que mes craintes s'affirment. Pour aller à la ligne n tu fais comme je t'ai montré. Pour la lire c'est tout simplement ensuite fgets. Où est le problème? Si tu ne sais pas comment générer un nombre aléatoire, laisse tout d'abord tomber cette histoire de fichier puis lis la doc de rand et srand. Si tu sais comment générer un nombre aléatoire mais pas comment lire une ligne dans un fichier alors laisse d'abord les nombres aléatoires et lis la doc de fgets. Après tu sauras les combiner.
    C'est quoi fseek et ftell.
    Des fonctions qui permettent de modifier/obtenir la position courante dans un fichier lorsque celà a un sens. S'utilisent généralement avec des fichiers binaires, rarement avec les fichiers texte (sauf pour se positionner au début : fseek(f, 0L, SEEK_SET)).

  7. #7
    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 sebastien83310 Voir le message
    Bonjour à tous !!!
    Un problème s'oppose à moi. Je voudrais savoir comment faire pour lire aléatoirement un mot dans un fichier (dico.txt) puis le stocker par la suite dans un tableau.
    En revanche, j'arrive très bien à lire le fichier grace à la fonction : fgetc (fichier).
    Merci...
    En supposant qu'il y a un mot par ligne :

    Une fois au début du programme :
    1. initialiser le générateur pseudo-aléatoire (srand())


    ...

    Tirer un mot au hasard dans le fichier :
    1. ouvrir le fichier en mode texte (fopen() avec "r")
    2. compter les lignes (les '\n' avec fgetc())
    3. tirer un numéro de ligne au pseudo-hasard (rand())
    4. revenir au début du fichier (rewind())
    5. lire les lignes (fgets()) en les comptant jusqu'à la valeur voulue
    6. supprimer le '\n' du mot lu

    La programmation, c'est le processus intellectuel qui permet d'élaborer cette séquence d'instruction. Ca demande surtout beaucoup de bon sens. Le codage, c'est rien...

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une autre possibilité c'est que toutes les lignes du fichier dictionnaire aient la même longueur.

    A ce moment, la calcul du nombre de lignes est simple (taille fichier / longueur ligne)

    Le déplacement à une ligne aléatoire est simple (fseek)

    En fait c'est beaucoup simple mais :
    * Quel gachis de place dans le fichier
    * Gare à toi si TOUTES les lignes n'ont pas la même longueur
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut
    Comme l'expliquait Emmanuel Delahaye, je n'arrive pas a compter le nombre de \n.

    je suis dans cette situation:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main(void)
    {
        FILE * dico;
        int c, a=0;
     
        srand(time(NULL));
     
        dico = fopen ( "C:/Documents and Settings/Sébastien/Mes documents/DUT - GEII/Language C/dico.txt" , "r" );
     
                if ( dico == NULL )
                {
                 printf("Erreur d'ouverture du fichier !\n");
                }
                else 
                {
                printf("Ouverture: OK\n");
                printf("Veuillez patientez...");     
     
                     while ( c != EOF )
                     {
                          c=fgetc(dico);
                           if(c=='\n')
                           {
     
                              a++; 
     
                           }
     
                     }
                     printf("Il y a %d mots.",a);
                }
     
        fclose(dico);
     
     
        system("pause");
        return 0;
    }
    Si quelqu'un paut m'aider.....

  10. #10
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Bonjour,

    * quand tu envoies un code ici, (le symbole # dans les boutons).

    * lorsque tu fais while ( c != EOF ) la première fois, c n'est pas initialisé.

  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 sebastien83310 Voir le message
    Comme l'expliquait Emmanuel Delahaye, je n'arrive pas a compter le nombre de \n.

    je suis dans cette situation:
    <...>
    Ceci
    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
     
    #include <stdio.h>
    #include <time.h>
     
    #if 0
    #define F_DICO "C:/Documents and Settings/Sébastien/Mes documents/DUT - GEII/Language C/dico.txt"
    #else
    #define F_DICO "/dev/dico/dico_fr_maj.txt"
    #endif
     
    int main (void)
    {
     
       srand (time (NULL));
     
       FILE *dico = fopen (F_DICO, "r");
     
       if (dico == NULL)
       {
          printf ("Erreur d'ouverture du fichier !\n");
       }
       else
       {
          int c, a = 0;
          printf ("Ouverture: OK\n");
          printf ("Veuillez patientez...\n");
     
          while ((c = fgetc (dico)) != EOF)
          {
             if (c == '\n')
             {
                a++;
             }
          }
          printf ("Il y a %d mots.\n", a);
          fclose (dico);
       }
     
       return 0;
    }
    fonctionne chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Ouverture: OK
    Veuillez patientez...
    Il y a 336531 mots.
     
    Press ENTER to continue.

  12. #12
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par ram_0000
    Une autre possibilité c'est que toutes les lignes du fichier dictionnaire aient la même longueur.
    ...
    Le déplacement à une ligne aléatoire est simple (fseek)
    Non on n'utilise pas fseek de cette manière dans un fichier texte. Pour aller à une ligne dans un fichier texte il n'y a pas 36 solutions : lire successivement toutes les lignes précédentes (mais pour faire ça il y a plus d'une méthode ...).

Discussions similaires

  1. Lecture fichier Word et remplacement paramètre
    Par Pfeffer dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/02/2005, 17h30
  2. [ifstream] pb lecture fichier non sequentielle
    Par bludo dans le forum SL & STL
    Réponses: 3
    Dernier message: 10/02/2005, 21h30
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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