Problème lecture une chaine caractère fichier

zaerty -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,


J'ai besoin de lire 25 lignes d'un fichier de format suivante:
0      0.000               0.000 
1      -90.618         299.859  
2      -480.287        -366.363 
3      -106.647        -202.037 
4      -134.373        -364.665 


Voici le programme que j'ai crée. Toutefois, ceci ne se compile pas.
#include<stdio.h> 
#include <stdlib.h> 



 struct Client 
{ 
 float x; //abscisse 
 float y; //ordonnée 

}; 


struct Client k[24]; 
int main() 
{ 

 FILE *file = NULL; 
 int i;  
   
 if((file = fopen("D:\\donnees.txt", "r") == NULL)/*ouverture du fichier en lecture*/ 
  printf("Error: impossible d'ouvrir fichier donnees.txt\n"); 
  
 else//non 
  
  
 { 
  while(fgets(struct Client, 25, file)!= NULL) 
  { 
   printf("%f%f",Client[i].x,Client[i].y); 
     } 
 } 
   
  
         
getchar();  
return(0); 
}


Quelqu'un pourrait-il m'aider ?

Merci par avance.

A voir également:

5 réponses

heyquem Messages postés 808 Statut Membre 131
 
salut,

fais le en Python (ou Ruby ou je ne sais quel autre langage évolué), sinon tu n'as pas fini de t'en voir.
En Python, on te fait ça en 5 minutes et 12 lignes
ça me fait pitié de voir les gens englués dans des langages comme le C ou le C++ pour faire des choses aussi simples.
Au fait c'est du C ou du C++ ton code stp ?
0
zaerty
 
C'est du c.

Je commence à apprendre le C.
Toute autre idée sera la bienvenue.
0
heyquem Messages postés 808 Statut Membre 131
 
Non mais c'est pas mal le C, c'est même très bien à mon avis. Tout dépend de ce qu'on projette de faire: si on a le temps d'attendre plusieurs mois avant de pouvoir faire des choses relativement élaborées, on peut se permettre d'apprendre progressivement le C; mais si on est pressé de pouvoir faire des choses , je ne vois pas comment faire autrement que de recourir à un langage évolué. L'idéal est d'apprendre les deux en même temps, un langage près de la machine qui permet de bien comprendre comment se passent les choses dans le détail, et un langage de haut niveau pour être productif. Python et C , c'est bien parce que Python est implémenté en C.

Y a pas que Python. Quoique j'aimerais bien savoir quels autres langages sont aussi pratiques et puissant en même temps que lui.
0
zaerty
 
Langage c
0
heyquem Messages postés 808 Statut Membre 131
 
tiens d'ailleurs voici un code en Python:

with open('fichier.txt','r') as f:
    lignes = []
    i = 0
    while i<25:
        lignes.append(f.readline()[0:-1])
        i+=1

print lignes


Il y a d'autres possibilités en fonction de la taille du fichier, des besoins, de la compétence du codeur, de la rapidité voulue, de la concision recherchée.... mais ce code de base marchera dans tous les cas, même si le fichier fait 2000 terabytes
0
zaerty
 
Merci pour votre réponse.
Je crois que j'ai mal choisi la fonction. Je cherche à quelle me renvoie un type int.
J'ai réecris mon programme en utilisant fscanf. Le programme la se compile mais lit que la première ligne!!
#include<stdio.h>
#include <stdlib.h>
 
 
 
 struct Client
{
	int num;
	double x;	//abscisse
	double y; //ordonnée
	
 
};
 
 
struct Client k[25];
int main()
{
 
	FILE *file = NULL;
	int i=0; 
		
	if((file = fopen("D:\\donnees.txt", "r")) == NULL)/*ouverture du fichier en lecture*/
	{
		printf("Error: impossible d'ouvrir fichier donnees.txt\n");
	}
	
	else//non
	
	
	{
		
		while(fscanf(file, "%d % f %f\n", &k[i].num,&k[i].x,&k[i].x)== 25);//lecture de données types doubles
			    
		fclose(file);
	}
			
			printf("%d%f%f\n",k[i].num, k[i].x,k[i].y);
			i++;
		
	
 
	
 
getchar(); 
return 0;
}Ca se compile mais j'obtiens ceci

Merci de vos indices.
0
heyquem Messages postés 808 Statut Membre 131
 
désolé, je ne peux pas t'aider, je ne connais pas le C
Remarque que si ton problème est dans le cadre de l'apprentissage de C et non pas pour te servir à quelque chose, il est normal d'en passer par là. Je n veux pas te dire de laisser tomber le C. Ca dépend de ton objectif.
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,

while(fscanf(file, "%d % f %f\n", &k[i].num,&k[i].x,&k[i].x)== 25);//
Essaie plutôt : fscanf(file,"%d%f%f,&k[i].num,&k[i].x,&k[i].y);
Ensuite faut incrémenter i. Avant de reparcourir le fscanf.

Pourquoi ne pas utiliser des double ? Vaut mieux oublier les float sauf cas particulier.

Cdlt,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
 
utilises les expressions regulières pour ne pas commetre d'erreurs lors de la lecture des lignes.
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Il n'y a pas besoin de sortir une bibliothèque lourde pour parser du texte avec des expressions régulières lorsqu'un simple fscanf suffit. D'autant plus que ce que tu mettras dans la regexp sera quasiment la même chaîne pour la lecture dans le fscanf.

Cdlt,
0
xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
 
Mais l'informatique: ce n'est pas de l'a peu près mon chers. vaux mieux apprendre à sortir les grands moyens. au moin comme cela on á le choix.
0
heyquem Messages postés 808 Statut Membre 131
 
les regex sont indispensables à connaître à la longue en informatique, mais on ne peut pas affirmer que ce soit une priorité pour un débutant
je pense qu'il vaut même mieux qu'un débutant apprennent les choses en commençant par les processus les plus basiques, pour avoir une vraie base de compréhension de ce qui se passera quand il utilisera plus tard des outils qui mâchent le travail en occultant ce qui se passe en arrière-fond
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Mais l'informatique: ce n'est pas de l'a peu près mon chers. vaux mieux apprendre à sortir les grands moyens. au moin comme cela on á le choix.
J'ai jamais dit que c'était de l'approximatif. Mais, c'est juste que dans son cas les regexp sont complètement inutiles. C'est comme si tu parles d'inclure une bibliothèque BIGNUM pour réaliser une simple multiplication...
0