Problème lecture une chaine caractère fichier
zaerty
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,
J'ai besoin de lire 25 lignes d'un fichier de format suivante:
Voici le programme que j'ai crée. Toutefois, ceci ne se compile pas.
Quelqu'un pourrait-il m'aider ?
Merci par avance.
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:
- Problème lecture une chaine caractère fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Caractère spéciaux - Guide
5 réponses
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 ?
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 ?
tiens d'ailleurs voici un code en Python:
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
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
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!!
Merci de vos indices.
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.
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,
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,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
utilises les expressions regulières pour ne pas commetre d'erreurs lors de la lecture des lignes.
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
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
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...
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...
Je commence à apprendre le C.
Toute autre idée sera la bienvenue.
Y a pas que Python. Quoique j'aimerais bien savoir quels autres langages sont aussi pratiques et puissant en même temps que lui.