Lire dans un fichier en C
Résolu/Fermé
A voir également:
- Lire dans un fichier en C
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire fichier epub - Guide
- Fichier rar - Guide
- Lire fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
8 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
26 mars 2009 à 15:26
26 mars 2009 à 15:26
Salut.
déjà les tableaux en C commencent à 0 pas à 1
Je pense qu'il faut faire une boucle du genre :
for (int i=0;i<N;++i)
{
fscanf(file_id,"Substructure computed by SDM: %d atoms ; JUMP : %f %f\n",(t+i),(j1+i),(j2+i));
}
déjà les tableaux en C commencent à 0 pas à 1
Je pense qu'il faut faire une boucle du genre :
for (int i=0;i<N;++i)
{
fscanf(file_id,"Substructure computed by SDM: %d atoms ; JUMP : %f %f\n",(t+i),(j1+i),(j2+i));
}
elanore31
Messages postés
374
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
7 août 2009
50
26 mars 2009 à 15:37
26 mars 2009 à 15:37
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *fichier;
char *temp;
long taille_file;
fichier = fopen(argv[1], "r");
//On fait pointer fichier vers la fin du fichier
fseek(fichier,SEEK_END,0);
/*On met la taille du fichier dans taille_fichier (car fichier pointe
vers la fin du fichier, sa position donne le nombre d'octets
pour arriver à la fin) */
taille_fichier=ftell(fichier);
//On refait pointer fichier au début du fichier
fseek(fichier,SEEK_SET,0);
//Allocation de temp avec la taille du fichier
temp=(char *)malloc(sizeof(char) * taille_fichier);
fscanf(fichier, "%s", temp);
printf("voila ce qu'il y a dans temp: ***%s***\n", temp);
fclose(fichier);
//On libère temp
free(temp);
return EXIT_SUCCESS;
}
c'est comme çà qu'on lit un fichier en C.
int main(int argc, char **argv)
{
FILE *fichier;
char *temp;
long taille_file;
fichier = fopen(argv[1], "r");
//On fait pointer fichier vers la fin du fichier
fseek(fichier,SEEK_END,0);
/*On met la taille du fichier dans taille_fichier (car fichier pointe
vers la fin du fichier, sa position donne le nombre d'octets
pour arriver à la fin) */
taille_fichier=ftell(fichier);
//On refait pointer fichier au début du fichier
fseek(fichier,SEEK_SET,0);
//Allocation de temp avec la taille du fichier
temp=(char *)malloc(sizeof(char) * taille_fichier);
fscanf(fichier, "%s", temp);
printf("voila ce qu'il y a dans temp: ***%s***\n", temp);
fclose(fichier);
//On libère temp
free(temp);
return EXIT_SUCCESS;
}
c'est comme çà qu'on lit un fichier en C.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
26 mars 2009 à 15:57
26 mars 2009 à 15:57
"ne permet pas de sauter cette chaine de caracteres séparés par des espaces."
Comprends pas ce que tu veux dire par là.
Une autre technique est comme le suggère une peut eleanor de stocker la ligne dans une chaîne de caractère puis de faire un sprintf ou un sscanf() sur cette châine.
Sinon, il est possible qu'il ne faille pas mettre de \n à la fin de mon scanf
Comprends pas ce que tu veux dire par là.
Une autre technique est comme le suggère une peut eleanor de stocker la ligne dans une chaîne de caractère puis de faire un sprintf ou un sscanf() sur cette châine.
Sinon, il est possible qu'il ne faille pas mettre de \n à la fin de mon scanf
elanore31
Messages postés
374
Date d'inscription
mercredi 18 février 2009
Statut
Membre
Dernière intervention
7 août 2009
50
26 mars 2009 à 16:00
26 mars 2009 à 16:00
si j'ai bien compris tu veux récupérer l'entier correspondant au nombre d'atome ?
dans ce cas c'est pas un problème de lecture de fichier mais de récupération de données.
dans ce cas c'est pas un problème de lecture de fichier mais de récupération de données.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
26 mars 2009 à 16:32
26 mars 2009 à 16:32
Explique moi en quoi le scanf que je t'ai donnée ne fonctionne pas !
http://www.linux-france.org/article/man-fr/man3/scanf-3.html
Les blancs ne devraient pas poser de problème. Le fscanf est à mon avis la seule solution, car un fseek n'est pas possible étant donnée que la longueur de la chaîne est variable.
Je ne suis pas le seul à penser comme ça, tu retrouve les même commentaires ici :
https://forum.hardware.fr/hfr/Programmation/C/double-lecture-fscanf-sujet_78899_1.htm
soit fscanf() soit sscanf() après avoir lu la ligne et mi dans un string.
http://www.linux-france.org/article/man-fr/man3/scanf-3.html
Les blancs ne devraient pas poser de problème. Le fscanf est à mon avis la seule solution, car un fseek n'est pas possible étant donnée que la longueur de la chaîne est variable.
Je ne suis pas le seul à penser comme ça, tu retrouve les même commentaires ici :
https://forum.hardware.fr/hfr/Programmation/C/double-lecture-fscanf-sujet_78899_1.htm
soit fscanf() soit sscanf() après avoir lu la ligne et mi dans un string.
j'ai essayé avec le fgets mais j'arrive a lire que la premiere ligne après il affiche n'importe quoi.
SVP de l'aide!
#include<stdio.h>
#include<math.h>
int main(int argc, char*argv[])
{
char buf[512];
FILE *pf;
int i;
int j[2];
pf = fopen(argv[1],"r");
if (pf==NULL)
{
printf("ouverture du fichier impossible \n");
}
for (i=0;i<2;i++)
{
fgetline(buf,70,pf);
sscanf(buf,"%d",&j[i]);
printf("%d\n",j[i]);
}
return(0);
}
SVP de l'aide!
#include<stdio.h>
#include<math.h>
int main(int argc, char*argv[])
{
char buf[512];
FILE *pf;
int i;
int j[2];
pf = fopen(argv[1],"r");
if (pf==NULL)
{
printf("ouverture du fichier impossible \n");
}
for (i=0;i<2;i++)
{
fgetline(buf,70,pf);
sscanf(buf,"%d",&j[i]);
printf("%d\n",j[i]);
}
return(0);
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
26 mars 2009 à 23:01
26 mars 2009 à 23:01
Salut,
Voici un programme (bâclé mais fonctionnel) qui te lira les valeurs de ton fichier ;-))
Cdlt
Voici un programme (bâclé mais fonctionnel) qui te lira les valeurs de ton fichier ;-))
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp=fopen("./fichier","r"); if(fp){ char buffer[256]; int t[100]; size_t i; size_t nb=0; while(fgets(buffer,sizeof buffer,fp)) sscanf(buffer,"Substructure computed by SDM: %d",&t[nb++]); for(i=0;i<nb;i++) printf("%d ",t[i]); free(fp),fp=NULL; } else return 1; putchar('\n'); return 0; }
Cdlt
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 mars 2009 à 08:30
27 mars 2009 à 08:30
Ba non, t"es trop con fiddy, on te dit que mettre "Substructure computed by SDM..." ça ne sert à rien. T'écoute vraiment rien ou quoi ? (ironique, au cas où... ;) )
kammans, t'es le roi des cons ! Tu as même réussi à me faire douter ! Tu fait chier le monde alors que la solution je te l'ai donné depuis le message 1 !
Donc, du coup j'ai récupéré ton fichier texte avec les atomes tout ça, et j'ai écris le code suivant :
Tu viens avec une question, on te donne la réponse, mais ça te plait pas. à ce moment là, arrête de poser des questions et démerde toi seul. Ou mieux, cesse d'être un abrutis et écoute ce qu'on te dit.
kammans, t'es le roi des cons ! Tu as même réussi à me faire douter ! Tu fait chier le monde alors que la solution je te l'ai donné depuis le message 1 !
Donc, du coup j'ai récupéré ton fichier texte avec les atomes tout ça, et j'ai écris le code suivant :
#include <stdio.h> #include <stdlib.h> int main() { int t[9],*a,i=0; float f1[9],f2[9]; FILE* fs=fopen("testCCM.dat","r"); a=t; while(!feof(fs)) { fscanf(fs,"Substructure computed by SDM: %d atoms ; JUMP : %f %f\n",a++,&f1[i],&f2[i]); printf("t vaut : %d, f1 %f f2 %f\n",t[i],f1[i],f2[i]); i++; } fclose(fs); system("pause"); return 0; }Et Ô ! miracle ça fonctionne !!!!
Tu viens avec une question, on te donne la réponse, mais ça te plait pas. à ce moment là, arrête de poser des questions et démerde toi seul. Ou mieux, cesse d'être un abrutis et écoute ce qu'on te dit.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 mars 2009 à 09:30
27 mars 2009 à 09:30
Pas mal le coup du pointeur inutile ;-)).
fscanf(...,t[i],f1[i],... suffit amplement.
fscanf(...,t[i],f1[i],... suffit amplement.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
27 mars 2009 à 10:11
27 mars 2009 à 10:11
Tu oublis le '&' ;)
au début j'avais la flemme de faire un compteur i. Et puis c'est qu'un programme de test fait en 2 minutes.
au début j'avais la flemme de faire un compteur i. Et puis c'est qu'un programme de test fait en 2 minutes.
kammans
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
27 mars 2009 à 10:45
27 mars 2009 à 10:45
merci pour tous pour votre aide.
ce qui m'embete mnt c que j'arrive pas à utiliser le tableau que j'ai rempli avec ces nmbrs en dehors de la boucle,
par exemple si je fait:
for (i=0;i<n;i++)
{
fscanf(pf," Substructure computed by SDM: %d atoms ; JUMP : %f %f ",&t[i],&c1[i],&c2[i]);
printf(" %d \n",t[i]);
}
ça marche bien mais si je fait sortir le printf de la boucle en faisant une otr boucle pour l'affichage ou si j'affiche juste un element, il m'affiche n'importe quoi!
printf(" %d \n",t[0]);
==> 1060332181
il garde pas le tableau en memoire ou quoi???
ce qui m'embete mnt c que j'arrive pas à utiliser le tableau que j'ai rempli avec ces nmbrs en dehors de la boucle,
par exemple si je fait:
for (i=0;i<n;i++)
{
fscanf(pf," Substructure computed by SDM: %d atoms ; JUMP : %f %f ",&t[i],&c1[i],&c2[i]);
printf(" %d \n",t[i]);
}
ça marche bien mais si je fait sortir le printf de la boucle en faisant une otr boucle pour l'affichage ou si j'affiche juste un element, il m'affiche n'importe quoi!
printf(" %d \n",t[0]);
==> 1060332181
il garde pas le tableau en memoire ou quoi???
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 mars 2009 à 11:02
27 mars 2009 à 11:02
Il n'y a pas de raison. Il faut faire attention à la porté de la variable.
Donne nous un code réel qui ne fonctionne pas.
Donne nous un code réel qui ne fonctionne pas.
26 mars 2009 à 15:40
#include<stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *pf;
int t[100];
float f1[10],f2[10];
int i;
int n=0, ca;
pf = fopen(argv[1],"r");
while ((ca = fgetc(pf)) != EOF)
{
if (ca == '\n')
{
n++;
}
}
printf("le nombre de lignes dans le fichier est: %i \n",n);
pf = fopen(argv[1],"r");
for (i=0;i<n-1;i++)
{
fscanf(pf,"Substructure computed by SDM: %d atoms ; JUMP : %f %f\n", &t[i],&f1[i],&f2[i]);
}
printf("%d %f\n",t[0],f1[0]);
}
mais le problème c'est que ecrire "Substructure computed by SDM: %d dans la syntaxe de fscanf ne permet pas de sauter cette chaine de caracteres séparés par des espaces.