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 remplissage d'un tableau en C


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut Lecture d'un fichier et remplissage d'un tableau en C
    Bonjour,

    Je souhaite récupérer des données numériques (double) d'un fichier (donnees.txt) afin de remplir mon tableau tabx[]. Je n'arrive pas à remplir mon tabx avec les données de mon fichier. J'obtiens des valeurs initialisées dans le tableau tableaux[] du main, c'est-à-dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1.0
    0.0
    0.0
    0.0
    Je n'arrive pas à comprendre pourquoi les valeurs initialisées ne sont pas remplacées par les valeurs lues dans le fichier donnees.txt.

    le fichier donnees.txt contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1.0
    2.0
    3.0
    4.0
    Et le code associé est le suivant :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    // Prototype de la fonction 
     
    void Monprogramme(double tabx[],double taby[]);
     
    int main(int argc, char *argv[])
    {
     
    	double tableauX[4] = {1,0,0,0};
    	double tableauY[4] = {12,3,2,1};
     
    	Monprogramme(tableauX,tableauY);
     
        return 0;
    }
     
     
    void Monprogramme(double tabx[],double taby[])
    {
     
    int i,l;
    unsigned int dimtab;
     
     
    // Lecture du fichier des donnees pour la caracterisation de la morphologie fractale
     
    unsigned int c1,nligfich=0;
     
    FILE *fichier;
     
    /* Ouverture en lecture du fichier donnees.txt */
     
    fichier=fopen("donnees.txt","r");
     
    if (fichier != NULL){
     
    /* On compte le nombre de points (nombre de lignes) du fichier donnees.txt */
     
    while ((c1 = getc(fichier)) != EOF){
     
        if (c1 == '\n')
            ++nligfich;
    }
     
    			dimtab=nligfich;
     
               /* Lire la premiere colonne du fichier donnees.txt et ranger les valeurs dans le tableau tabx */
     
    			for (l=0 ; l< dimtab ; l++)
    			{
    			fscanf(fichier,"%lf",&tabx[l]);
    			fprintf(stdout,"%lf\n",tabx[l]);
     
    			}
     
    fclose(fichier);
     
    }
    else{
     
    	fprintf(stdout,"\n");
    	fprintf(stdout,"****************************************************************\n");
    	fprintf(stderr,"Attention erreur 1000: fichier  %s  introuvable \n","donnees.txt");fflush(stderr);
    	fprintf(stdout,"****************************************************************\n");
    	fprintf(stdout,"\n");
     
    	exit(1000);
    }
     
    }
    J'ai déjà utilisé avec succès un programme similaire donc je ne vois pas d'où vient le problème. Problème d'initialisation? De passage des paramètres à la fonction?

    Merci de votre aide !



    Merci d'avance.

  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
    Après avoir compté les lignes (d'ailleurs, pourquoi le faire ?) tu es arrivé à la fin du fichier.
    Avant de le lire à nouveau, il faut se replacer à son début (rewind())
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    fgets() et strtod() pourront surement t'aider.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut
    Merci pour ta réponse,

    Je compte le nombre de lignes pour en déduire le nombre de points à tracer (la taille du tableau) et j'ai besoin de ce nombre de points pour faire des calculs de régression linéaire.
    En fait, au départ je ne connais pas précisément le nombre de points à tracer et donc le nombre de lignes du fichier (une ligne par point).

    Un programme indépendant me fournit le fichier de données (fichier qui peut contenir un grand nombre de points).

    le rewind(fichier) fonctionne parfaitement et renvoie les bonnes valeurs.

    En fait le fichier contient en réalité deux colonnes et plusieurs lignes, j'aimerai stocker la première colonne dans le tableau tabx[] et la deuxième colonne dans un tableau taby[], qui sont respectivement les abscisses et ordonnées des points à tracer et sur lesquels la régression sera réalisée. Mais malheureusement cet exercice semble plus difficile c'est pour cette raison que je décompose le fichier en deux (un fichier abscisses et un autre ordonnées) et utiliser le code ci-dessous :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
     
    // Prototype de la fonction 
     
    void Monprogramme(double tabx[],double taby[]);
     
    int main(int argc, char *argv[])
    {
     
    	double tableauX[4] = {1,0,0,0};
    	double tableauY[4] = {12,3,2,1};
     
    	Monprogramme(tableauX,tableauY);
     
        return 0;
    }
     
     
    void Monprogramme(double tabx[],double taby[])
    {
     
    int i,l;
    unsigned int dimtab;
     
     
    // Lecture du fichier des donnees pour la caracterisation de la morphologie fractale
     
    unsigned int c1,nligfich=0;
     
    FILE *fichier;
     
    /* Ouverture en lecture du fichier donnees.txt */
     
    fichier=fopen("donnees.txt","r");
     
    if (fichier != NULL){
     
    /* On compte le nombre de points (nombre de lignes) du fichier donnees.txt */
     
    while ((c1 = getc(fichier)) != EOF){
     
        if (c1 == '\n')
            ++nligfich;
    }
     
    			dimtab=nligfich;
     
               /* Lire la premiere colonne du fichier donnees.txt et ranger les valeurs dans le tableau tabx */
    		    rewind(fichier);
    			for (l=0 ; l< dimtab ; l++)
    			{
    			fscanf(fichier,"%lf\n",&tabx[l]);
    			fprintf(stdout,"%lf\n",tabx[l]);
     
    			}
     
    fclose(fichier);
     
    }
    else{
     
    	fprintf(stdout,"\n");
    	fprintf(stdout,"****************************************************************\n");
    	fprintf(stderr,"Attention erreur 1000: fichier  %s  introuvable \n","donnees.txt");fflush(stderr);
    	fprintf(stdout,"****************************************************************\n");
    	fprintf(stdout,"\n");
     
    	exit(1000);
    }
     
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut
    Bon ça semble marcher réécrivant fscanf comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fscanf(fichfractale,"%lf %lf\n",&tabx[l],&taby[l]);

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2011, 15h14
  2. Réponses: 13
    Dernier message: 02/08/2008, 18h41
  3. [HashMap] lecture d'1 hasmap et remplissage d'un tableau
    Par _KB_ dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 30/06/2006, 19h33
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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