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 .txt


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Lecture fichier .txt
    Bonjour,

    Dans le cadre d'un cours, je dois lire un fichier texte contenant des données placées ainsi :

    X
    A0 B0
    A1 B1
    A2 B2
    A3 B3
    ... ...

    où X est une donnée isolée.

    Mon but est de récupérer ces données, et de les stocker dans des tableaux (pour A et B) et dans un double pour X.

    Pour le moment, j'ai uniquement traité le cas où X n'existait pas, c'est-à-dire qu'à la première ligne se trouvaient directement A0 et B0.

    Ce code se construit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Lecture du fichier texte avec fgets et une boucle while pour connaître le nombre de lignes, et donc pour allouer dynamiquement la place pour mes 2 tableaux
     
    Puis relecture avec une boucle for pour stocker les données dans ces tableaux
    Le voici :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
     
    #define MAXLINESIZE 128
     
    int main( int argc, char *argv[] )
    {    
     
        FILE * FE = NULL; //pointeur du fichier d'entrée
     
        char linebuff[MAXLINESIZE] ;
         int nb = 0 ; //nombre d'échantillons du signal (ou nombre de lignes du fichier d'entrée-1 (la première))
        double *A ; //vecteur A
        double *B ; //vecteur B
        int i = 0 ; //variable de boucle
     
        FE = fopen("/home/entree.txt" , "r") ; 
     
        if ( FE != NULL )
        {
            printf( "Le fichier d'entrée est correct.\n" ) ;   
     
            //Première boucle pour récupérer le nombre de ligne du FE
            while( fgets ( linebuff, MAXLINESIZE, FE ) != NULL )
            {
                nb++;
            }
            printf( "Le signal contient %i éléments.\n", nb ) ;
     
            rewind( FE );
     
            //Allocation de l'espace mémoire pour les 2 tableaux
            A = malloc (nb * sizeof ( double ) ) ;
     
            B = malloc (nb * sizeof ( double ) ) ;        
     
            //Seconde boucle pour sauvegarder les données du fichier dans les tableaux
     
            for ( i = 0 ; i < nb ; i++ )
            {
                fscanf( FE, "%lf %lf", &A[i], &B[i] ); 
             }        
        }    
     
        fclose ( FE ) ;
    Maintenant pour prendre en compte la donnée isolée "X" je pensais faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Lecture du fichier d entrée, avec une boucle et un compteur (quelque chose du style while ... != \n ), pour connaître le nombre de caractères contenus à la première ligne et stocker la donnée X.
     
    Avec fseek, je place le curseur virtuel de lecture à la valeur du compteur+1 (donc à la 2eme ligne ?)
     
    Je colle mon code précédent en réajustant, à la place du rewind je fais un fseek
    Le problème c'est que je ne sais pas trop comment écrire les 2 premières étapes citées précédemment, je me mélange un peu les pinceaux entre pointeurs et données ...

    Pourriez-vous m'aider je vous prie ?

    Un grand merci d'avance !!

    Apeth

  2. #2
    Membre expérimenté Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Points : 1 372
    Points
    1 372
    Par défaut
    Si ta donnée isolée X est bien unique, systématique et toujours placée en première ligne, alors pourquoi ne pas tout simplement intercaler une lecture de la première ligne et stocker le résultat de cette lecture dans une variable puis boucler une fois de moins que le nombre de lignes décomptées ?

    Quelque chose comme ça (j'ai gardé le même code que toi, ce qui ne signifie pas que j'aurais fait les mêmes choix, c'est simplement pour illustrer mon propos) :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
     
    #define MAXLINESIZE 128
     
    int main()
    {
     
      FILE * FE = NULL; //pointeur du fichier d'entrée
     
      char linebuff[MAXLINESIZE] ;
      int nb = 0 ; //nombre d'échantillons du signal (ou nombre de lignes du fichier d'entrée-1 (la première))
      double *A ; //vecteur A
      double *B ; //vecteur B
      double X ; //donnée isolée
      int i = 0 ; //variable de boucle
     
      FE = fopen("/home/entree.txt" , "r") ;
     
      if ( FE != NULL )
        {
          printf( "Le fichier d'entrée est correct.\n" ) ;
     
          //Première boucle pour récupérer le nombre de ligne du FE
          while( fgets ( linebuff, MAXLINESIZE, FE ) != NULL )
            {
              nb++;
            }
          printf( "Le signal contient %i éléments.\n", nb ) ;
     
          rewind( FE );
     
          //Allocation de l'espace mémoire pour les 2 tableaux
          A = malloc (nb * sizeof ( double ) ) ;
     
          B = malloc (nb * sizeof ( double ) ) ;
     
          //récupération directe de la première ligne en tant que donnée isolée
     
          fscanf( FE, "%lf", &X );
     
          //Seconde boucle pour sauvegarder les données du fichier dans les tableaux
     
          for ( i = 1 ; i < nb ; i++ )
            {
              fscanf( FE, "%lf %lf", &A[i], &B[i] );
            }
     
          fclose ( FE ) ;
        }
     
      return 0;
    }

Discussions similaires

  1. Lecture fichier txt vers tableau alloué
    Par yeboum dans le forum Fortran
    Réponses: 3
    Dernier message: 27/11/2007, 09h31
  2. Lecture fichier TXT
    Par Oncle_Pete dans le forum Delphi
    Réponses: 5
    Dernier message: 16/07/2007, 16h43
  3. lecture fichier txt
    Par stephaneamadeus dans le forum C
    Réponses: 8
    Dernier message: 28/04/2006, 18h47
  4. Lecture fichier txt
    Par licorne dans le forum C
    Réponses: 3
    Dernier message: 03/04/2006, 17h14
  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