lecture de mon fichier de donnees initiales
Bonjour, je désire me faire un fichier txt qui contienne toutes mes donnees de mon pb et ensuite je veux faire une fonction qui lira ce fichier et remplira des tableaux. Voici tout d'abord un exemple de mon fichier d'entrées (input.txt) :
Code:
1 2 3 4 5
|
TEMP 350 400 450
PRES 1.5 1.7 1.6
EGR 20 30 45
RICHESSE 0.6 0.5 0.4 |
Là où je bloque est dans la lecture d'une ligne pour être plus précis. je vous envoie la partie qui bug :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
file=fopen(input_file,"r");
while( !feof(file) && (fgets (line, sizeof line, file) != NULL) )
{
/* suppression du caractère '\n' */
char * p = strchr(line, '\n');
if (p != NULL)
*p = 0;
/* lecture ligne par ligne et on remplit les tableaux correspondant au mot clé lu */
if(strstr(line,"TEMP ")!=NULL)
{
char * keyword=NULL;
fscanf(file,"%s",keyword); <-- ici ca bug
for(i=0;i<*N;++i)
fscanf(file,"%lf",&temp[i]);
blabla ...
} |
J'ai avant testé l'ouverture du fichier, créer mes tableaux avec malloc etc.
line est défini comme suit
et c'est dans ce tableau que sera mis le résultat de fgets. En fait, je veux lire les trois nombres après TEMP et les mettre dans mon tableau temp. Pouvez-vous me donner un petit coup de pouce s'il vous plait. Une fois que ca marchera pour TEMP, je répèterai le même algo pour PRES et les autres mots clés.
Merci.
Re: lecture de mon fichier de donnees initiales
Mes remarques :
Code:
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
|
file = fopen(input_file, "r");
/* -ed-
while( !feof(file) && (fgets (line, sizeof line, file) != NULL) )
Ce feof() ne sert à rien. La fin de fichier est detectee par le controle de la valeur retournee par fgets(), ce qui est correct.
*/
while ( fgets (line, sizeof line, file) != NULL )
{
/* suppression du caractère '\n' */
char * p = strchr(line, '\n');
if (p != NULL)
*p = 0;
/* -ed- OK */
/* lecture ligne par ligne et on remplit les tableaux correspondant au mot clé lu */
if (strstr(line, "TEMP ") != NULL)
{
char * keyword = NULL;
fscanf(file, "%s", keyword); < -- ici ca bug
/* -ed-
keyword vaut NULL. Il n'y a donc pas d'espace mémoire pour stocker le résultat.
*/ |
Une fois que la ligne est lue par fgets(), et identifiée avec strstr(), il faut traiter le reste de la lignenavecn par exemple, sscanf()...
Ne pas mélanger lecture et traitement. Ne pas utiliser fscanf(), trop difficile à faire correctement.