Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Lecture d'un fichier texte, en language C

Tags :
  • Programmation
Dernière réponse : dans Programmation
Partagez
17 Avril 2006 14:42:24

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

17 Avril 2006 19:19:15

et avec "%f, " dans le scanf ?
comment as-tu écrit le fichier ?
17 Avril 2006 19:53:33

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!

Contenus similaires
17 Avril 2006 20:17:11

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


17 Avril 2006 20:50:50

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!
17 Avril 2006 21:41:32

As-tu recompilé et exécuté le bon programme ?
Là, je pense que tu as exécuté l'ancien programme.

Comment affiches-tu ces résultats ?
18 Avril 2006 07:29:13

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!
18 Avril 2006 13:16:32

Et ce n'est pas un problème du fichier ?
car dans le fichier, le premier est 0 et pas 0.0

sinon essaie de lire un autre type de donnée (comme int ou une chaine de caractères).
18 Avril 2006 14:32:40

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.

18 Avril 2006 14:36:51

A tout hasard, initialise ton pointeur à NULL au début de ton code ;-)
18 Avril 2006 14:48:34

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 !
9 Septembre 2008 11:19:35

61096,1,162088 a dit :
Salut,

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

float INPUT[100]; ... etc
quotemsg]
Mets char INPUT[100]
et utilises %s au lieu de %f et ça devrait fonctionner
13 Septembre 2008 09:19:17

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.
13 Septembre 2008 18:35:42

Le sujet date de 2006, il est certainement passé à l'XML maintenant :D  ;) 
8 Août 2009 02:49:46

//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);
}

}
8 Août 2009 02:51:04

//VOILA LE FICHIE TEXT
0 114 70 -70 -114 -0 114 70 -70 -114 -0
29 Novembre 2009 10:59:13

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!
29 Novembre 2009 11:30:46

Salut,

1: tes lignes sont de longueur fixe ? (fseek)

2: solution possible: tu boucle la lecture de ton fichier en utilisant un compteur, quand tu arrive à la 7 itération, tu commences à exploiter les données lues..
29 Novembre 2009 12:14:16

Je choisirais la seconde solution pour parer aux possibles évolutions du fichier. ;) 
29 Novembre 2009 12:25:07

CRicky a dit :
Je choisirais la seconde solution pour parer aux possibles évolutions du fichier. ;) 




moi aussi !!!!
29 Novembre 2009 17:14:59

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
29 Novembre 2009 17:29:21

c'est quoi ta structure?


29 Novembre 2009 17:34:54

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 
29 Novembre 2009 18:26:13

De toute façon, il faut analyser l'en-tête pour vérifier que le format de ton fichier est correct.
Si ton en-tête est variable oublie le fseek.
29 Novembre 2009 19:39:57

Les 6 premières lignes sont quasiment les mêmes sauf le nom du fichier qui varie
29 Novembre 2009 21:33:40

Et bien, c'est un problème car au fseek, tu ne lui donnes que le nombre d'octets à décaler (nombre de caractères + caractères spéciaux).
30 Novembre 2009 08:34:58

donc la solution la plus simple (et de toute manière la plus sure !!!) reste le parcours itératif.

Tant que tu n'est pas à la 7eme itération, tu boucles.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS