Tom's Guide > Forum > Programmation > Lecture d'un fichier texte, en language C
Mot :    Pseudo :           
 

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!

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à CRicky

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!

Répondre à wish@IDN

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.

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



ou encore:

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



Répondre à CRicky

FILE *ReadInput;

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


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

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!

Répondre à wish@IDN

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 ?

Répondre à CRicky

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!

Répondre à wish@IDN

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

Répondre à CRicky

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.

Répondre à ataofeal

A tout hasard, initialise ton pointeur à NULL au début de ton code ;-)

Répondre à RequinPanda

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 !

Répondre à ThibB

[quotemsg=61096,1,162088]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

Répondre à hack6dent

Si tes données sont sous ce format :

Code :
  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.

Répondre à chrisz

Le sujet date de 2006, il est certainement passé à l'XML maintenant :D ;)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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

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

}

Répondre à otymine007

//VOILA LE FICHIE TEXT
0 114 70 -70 -114 -0 114 70 -70 -114 -0

Répondre à otymine007
Tom's Guide > Forum > Programmation > Lecture d'un fichier texte, en language C
Aller à :

Il y a 281 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens