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