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 :

Gestion d'un tableau


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Gestion d'un tableau
    Bonjour,

    J'essaie à l'aide des commandes fgetc() et ftell() de récupérer les valeurs(ou adresses?) de chaque passage à la ligne d'un fichier texte. Ce fichier texte est un dictionnaire de 20mots (un mot par ligne).

    Voici une partie de mon code

    Code C : 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
     
    FILE *fichier=NULL;
         fichier=fopen("dico.txt","r"); // ouverture en lecture du fichier texte
         int curseur=0;                   
         curseur=fgetc(fichier);       // initialisation du curseur virtuel à 0
         long  tableau[1000]={0};   // création d'un tableau trop gros pour stocker les valeurs du curseur
         int i=0;
        do   
        {
            for (i=0; i<180; i++)
                {
                    if(curseur=='\n')    
                        {
                        tableau[i]=ftell(fichier);  // lorsque le curseur arrive sur une déclaration de changement de ligne, la fonction ftell() remplit le tableau
                        }
                    curseur=fgetc(fichier);
                }
     
        } while(curseur != EOF); // la condition s'éxécute jusqu'à la fin du fichier
    Comment faire pour extraire dans un tableau (ou un nouveau tableau) uniquement les valeurs de chaque '\n' ?

  2. #2
    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
    Comment faire pour extraire dans un tableau (ou un nouveau tableau) uniquement les valeurs de chaque '\n' ?
    Cette question n'est pas claire. Peut être s'agit-il de trouver la position des '\n' au lieu de la position après le '\n' ?

    Pour ton information, il faut considérer deux choses :

    - la fin de ligne peut être codée dans le fichier par 1 ou 2 caractères selon son origine et avec que OS il a été construit, bien que cela ne se traduise dans le programme C que par un unique '\n'

    - Pour un fichier texte, la valeur retournée par ftell() code une position dans le fichier d'une façon non précisée et utilisable uniquement pour se repositionner dans le fichier avec fseek(....,...., SEEK_SET). En particulier, la différence entre deux de ces valeurs ne représente pas nécessairement le nombre de bytes du fichier entre les deux positions.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Effectivement ma question manquait de clarté, merci pour ta réponse.

    J'essaie de créer un programme qui est sensé prendre un mot au hasard dans un fichier texte, le problème c'est qu'il n'existe pas à ma connaisse de commande pour changer de ligne, donc voila comment je compte m'y prendre :


    - ouvrir un fichier texte contenant une liste de mot ( un mot par ligne )
    - utiliser la commande fgetc() pour lire le fichier
    - récupérer chaque saut de ligne (\n) et placer les adresses données par ftell() dans un tableau
    - faire un random du tableau pour spécifier une ligne au hasard

    J'imagine que je m'y prends peut-être mal mais je ne veux pas copier/coller une fonction bêtement donc je préfère y arriver par moi même (je suis en auto formation)
    Le problème ici c'est que j'initialise un tableau qui est d'une part trop gros, et d'une autre part remplit de "0" et je ne parviens pour le moment pas à isoler les valeurs autres que "0" dans un nouveau tableau.
    Une petite aide ?

  4. #4
    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
    Je ne dois pas bien comprendre ce que tu veux faire car je ne comprend pas cette boucle for avec cette limite de 180, ni cette histoire de nouveau tableau.

    Je verrais quelque chose comme :
    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
         int curseur;
         int i;
         long  tableau[1000]={0};
         FILE *fichier=fopen("dico.txt","r"); // ouverture en lecture du fichier texte
         if(fichier != NULL)
         {
            i = 0; 
            do   
            {
               curseur=fgetc(fichier);       
               if(curseur=='\n')    
               {
                  tableau[i]=ftell(fichier);  // lorsque le curseur arrive sur une déclaration de changement de ligne, la fonction ftell() remplit le tableau
                  i++;
               }
           } while(curseur != EOF); // la condition s'éxécute jusqu'à la fin du fichier
          // i contient le nombre d'entrées du tableau 
    //......
         }

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    J'essaie à l'aide des commandes fgetc() et ftell() de récupérer les valeurs(ou adresses?) de chaque passage à la ligne d'un fichier texte. Ce fichier texte est un dictionnaire de 20mots (un mot par ligne).
    L'utilisation de fgetc, ftell est obligatoire ou seul l'objectif principal (tirage au hasard d'un mot dans un fichier) est visé?

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    L'utilisation de fgetc, ftell est obligatoire ou seul l'objectif principal (tirage au hasard d'un mot dans un fichier) est visé?
    J'essaie justement de m'en sortir avec les moyens du bord, je sais déjà qu'il doit y avoir des solutions tellement plus simple

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    Tu ne réponds pas à la question

  8. #8
    Membre habitué
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 144
    Points
    144
    Par défaut
    Il me semble que ton idée de la façon de te représenter le problème est peu claire. Il y a au moins deux facteurs qui peuvent changer complètement la façon de faire:

    * Est-ce que tu connais le nombre de mots à l'avance (= c'est une constante) ?
    * Est-ce que ce nombre est "petit", ou a une limite max petite (raisonnable par rapport à une taille mémoire faible) ?

    Si tu connais le nombre, alors ça facilite l'implantation. S'il est petit, tu peux charger les mots en mémoire dans un tableau et faire un tirage aléatoire sur ce tableau, ce qui est bien plus facile (et souple. et rapide, si tu veux faire d'autres choses avec les mots) que te balader dans un fichier sur disque.
    Comme tu es en auto-formation (moi aussi ), je te conseilerais de faire le cas simple (nombre connu et petit), puis de passer à un nombre variable, et enfin le cas sans limite max où il te faudrait choisir un mot dans le fichier même. Tu peux ensuite reprendre le cas variable et faire d'autres choses avec ton tableau (par exemple générer des phrases aléatoire suivant une grammaire : c'est très intéressant et aussi parfois marrant).

    Pour lire les mots dans le fichier et les charger dans un tableau, il y a plusieurs façons de faire (sans parler des 2 cas où tu connais le nombre ou pas). Réfléchis, tu verras. On t'aidera plus si besoin, dis-nous ce qui te vient à l'esprit, et/ou montre tes essais et leus résultats (y compris erreurs de compil).

    Note : mes propositions de conception ne sont que des propositions.

    Denis

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

Discussions similaires

  1. Gestion d'un tableau à deux dimensions
    Par LadyArwen dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/10/2007, 12h30
  2. [POO] Gestion d'un tableau en attribut
    Par Shandler dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2007, 22h48
  3. gestion d'un tableau d'Object
    Par niro75 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 30/10/2006, 18h33
  4. Réponses: 3
    Dernier message: 14/03/2006, 06h19
  5. Gestion d'un tableau dynamique
    Par almisuifre dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/02/2005, 20h07

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