Se connecter avec
S'enregistrer | Connectez-vous

Lecture d'un fichier texte, en language C

Dernière réponse : dans Programmation

Salut,

Pour lire les données dans un fichier j'ai utilisé le code suivant:

float INPUT[100];
FILE *ReadInput;

ReadInput = fopen ("c:\\signal.txt", "r") ;


for (int i=0 ; i<100 ; i++)
{
fscanf (ReadInput, "%f", &INPUT);
}

fclose (ReadInput) ;


Les elements dans le fichier signal.txt sont placés de cette maniere, par example:
0, 114.1268, 70.5342, -70.5342, -114.1268, -0.0000, 114.1268 , 70.5342 , -70.5342,

Et lorsque je verifie la copie que le tableau INPUT a prise , les elements sont plutot different:
0.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000

Dois je changer l'alignement des elements dans le tableau de départ, qu'est ce qui peut bien causer cette difference. A mon avis, peut etre les elements sont mal interpretés!

Merci d'avance si vous en savez quelque chose!

Autres pages sur : lecture fichier texte language

Lassé par la pub ? Créez un compte

et avec "%f, " dans le scanf ?
comment as-tu écrit le fichier ?

salut,

j'ai pas bien compris ce que tu veux dire par la! Au fait j'ai un fichier signal.txt et j'aimerais juste lire les données qui sont labas et la copie doit etre dans le tableau INPUT mais ca marche pas avec le code que j'ai utilisé!
Une idée a ce propos!

Expert Programmation

En regardant mieux ton code, j'ai remarqué que INPUT n'était jamais déplacé, donc tu écris tous les éléments du fichier dans le premier élément.
Le dernier de ton fichier doit être 0., ce qui explique que tu est 0 dans le premier et n'importe quoi dans les autres.
  1. for (int i=0 ; i<100 ; i++)
  2. {
  3. fscanf (ReadInput, "%f", &INPUT[i]);
  4. }


ou encore:
  1. for (int i=0 ; i<100 ; i++)
  2. {
  3. fscanf (ReadInput, "%f", INPUT + i);
  4. }


FILE *ReadInput;

ReadInput = fopen ("c:\\signal.txt", "r") ;


for (int i=0 ; i<100 ; i++)
{
fscanf(ReadInput, "%f", &INPUT);
}

fclose (ReadInput) ;

avec ce code je recois le meme result , le tableau INPUT donne toujours :
0.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000

Ce qui veut dire que les elements dans le fichier signal.txt n'ont pas vraiment etaient lus tels qu'ils sont. Je ne vois pas ou est l'erreur!!
merci!

Bonjour

J'a recompilé et executé mais c'est toujours les meme results!
Voici comment les elements sont placés dans le fichier signal.txt
ils sont alignés de cette maniere :
0, 114.1268, 70.5342, -70.5342, -114.1268, -0.0000, 114.1268 , 70.5342 , -70.5342, -114.1268 , -0.0000

et pour verifier si le tableau INPUT contient exactement les meme données j'ai fait :

for( int n = 0; n<100; n++){
printf("%f\n", INPUT[n]);
}

et je recois plutot ca comme results

0.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000
-107374176.000000

Enfin je ne sais pas pourquoi ca marche pas!
merci!

salut,

Cricky à raison, ton 0 fait planter ta lecture puisque ce n'est pas un float mais un entier.

Personnellement je n'aime pas le fscanf et ses copains, je préfère un bon fread mais c'est une question de goût. Ceci oblige d'avoir une structure stricte du fichier et de ne pas essayer d'interpreter des valeurs qui n'ont rien à voir.
Et un float écris en texte dépend de la zone géographique où est executé ton code, alors que s'il est écrit en binaire y'a pas de problème ... mais on ne fait parfois pas ce que l'on veut.

Perso j'ai rélaisé il y a quelques jours un programme de conversion de format de fichier en C, qui utilise donc abondamment les fonction de lecture et je te conseil vraiment d'utiliser la fonction "fgets" pour lire le fichier ligne par ligne puis s'analyser chaque ligne avec un "sscanf".

Quelque chose comme :

i=0;
while (NULL != fgets(buf,sizeof(buf),ReadInput){
sscanf(buf,"%f",&INPUT[i++]);
}

Attention ca c'est dans le cas d'un fichier avec un réel par ligne !

Si tes données sont sous ce format :
  1. 0, 114.1268, 70.5342, -70.5342, -114.1268, -0.0000, 114.1268 , 70.5342 , -70.5342, -114.1268 , -0.0000, ...

alors il y a un séparateur composé d'une virgule et d'un espace à lire aussi ... sinon tu restes au même endroit dans la lecture de ton fichier.

//voila ce code :D  sa marche sa affiche tt ce qui est dans le ficier
//t avai un probleme de declaration des variable et en+ fau pas mettre les vergule mais garder les
//espace merci ton code ma aide:D 

#include<stdio.h>
#include<string.h>
void main(){
int INPUT[100];
FILE *ReadInput;

ReadInput = fopen("c:\\signal.txt","r") ;


for (int i=0 ; i<100 ; i++)
{
fscanf(ReadInput,"%i",&INPUT);
}

fclose(ReadInput) ;
for (int i=0 ; i<11 ; i++)
{
printf("%i\n",INPUT);
}

}

Bonjour tout le monde, j'ai un petit problème. EN fait je souhaite lire des données à partir d'un fichier texte. Les données dont j'ai besoin commencent à partir de la 7 éme ligne et sur chaque ligne j'ai besoin de lire 3 données séparées les unes aux autres par un espace. Sauf que je n'arrive pas à me positionner à la 7 ème ligne. Une idée SVP??
Je vous remercie d'avance!

Je suis d'accord avec vous mais je voulais savoir comment pourrais je utiliser la fonction fseek().
Maintenant je pointe bien sur la 7ème ligne mais je n'arrive pas à copier ces données dans la structure que j'ai déclaré.
Les fichiers sont des fichiers texte pour le problème du voyageur de commerce

Une structure ville avec indice et les coordonnées à savoir x et y. Le passage du tableau des structures se fait par un pointeur donc en gros faudrait que j'ai *v.indice=i et x et y les valeurs qui suivent l'indice.
La forme du fichier est la suivante:
NAME : a280
COMMENT : drilling problem (Ludwig)
TYPE : TSP
DIMENSION: 280
EDGE_WEIGHT_TYPE : EUC_2D
NODE_COORD_SECTION
1 288 149
2 288 129
3 270 133
4 256 141
5 256 157
6 246 157
7 236 169
8 228 169
9 228 161
10 220 169
11 212 169
12 204 169
13 196 169
14 188 169
15 196 161
16 188 145
17 172 145
18 164 145
19 156 145
20 148 145
21 140 145



Et merci d'avance :D 
Lassé par la pub ? Créez un compte
Tom's guide dans le monde