|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Lire toutes les chaines d'un fichier [ Archives / Au secours ] (JMGR)
Informations & options pour cette discussion
dimanche 27 janvier 2002 à 18:01:07 |
Lire toutes les chaines d'un fichier

JMGR
|
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini. Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
dimanche 27 janvier 2002 à 19:50:11 |
Re : Lire toutes les chaines d'un fichier

header
|
Si tu veux quil ny est plus de boucle infini il faut que tu testes la fin du fichier avec EOF
------------------------------- Réponse au message : -------------------------------
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
dimanche 27 janvier 2002 à 20:35:31 |
Re : Lire toutes les chaines d'un fichier

MangaII
|
Re ! Je ne sais pas ou tu as trouvé ta boucle for avec la comparaison, mais tu ne pourra jms avoir un code qui marche en faisant ca ! Dans le cas d'un fchier, tu ne c pas quelle est sa longueur ! Or, par définition, une boucle FOR se répète un nombre défini de fois ! c pas ce que tu ve ! Comm je te l'ai dit pour l'otre mess, utilise une boucle WHILE !
et pour tester si tu est a la fin du fichier, c'est FEOF regarde la doc pour ces fonctions, et tu verra que tu va trouver ton bonheur ! A+ NICO !
------------------------------- Réponse au message : -------------------------------
Si tu veux quil ny est plus de boucle infini il faut que tu testes la fin du fichier avec EOF
------------------------------- Réponse au message : -------------------------------
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
lundi 28 janvier 2002 à 09:42:02 |
Re : Lire toutes les chaines d'un fichier

JMGR
|
En fait, il me refait une boucle infinie !
Mon code :
FILE *fp,*fp2; char tmp[1]; char temp[255]; int count=0,i=0; fp=fopen("test.txt","r"); fp2=fopen("test.txt","w"); while(feof(fp)==0) { count++; } sprintf(temp,"Nombre d'octets : %d",count); MessageBox(temp,"",MB_OK); while(i<count) { fread(tmp,sizeof( char ),1,fp); fwrite(tmp,sizeof( char ),1,fp2); i++; } fclose(fp); fclose(fp2);
------------------------------- Réponse au message : -------------------------------
Re ! Je ne sais pas ou tu as trouvé ta boucle for avec la comparaison, mais tu ne pourra jms avoir un code qui marche en faisant ca ! Dans le cas d'un fchier, tu ne c pas quelle est sa longueur ! Or, par définition, une boucle FOR se répète un nombre défini de fois ! c pas ce que tu ve ! Comm je te l'ai dit pour l'otre mess, utilise une boucle WHILE !
et pour tester si tu est a la fin du fichier, c'est FEOF regarde la doc pour ces fonctions, et tu verra que tu va trouver ton bonheur ! A+ NICO !
------------------------------- Réponse au message : -------------------------------
Si tu veux quil ny est plus de boucle infini il faut que tu testes la fin du fichier avec EOF
------------------------------- Réponse au message : -------------------------------
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
lundi 28 janvier 2002 à 20:32:45 |
Re : Lire toutes les chaines d'un fichier

MangaII
|
Salut ! Ton idée est pas con, mais j'ai encore des critiques a faire ! Dans ton code, tu fé 2 boucle, ce qui te fé 2 fois plus de temps ! La première ne sert qu'a vérifier la taille du fichier, et pour ca, y'a des fonctions pour ca ! Par exemple, tu utilise fseek pour déplacer le curseur a la fin du fichier, puis ftell pour savoir a quel nombre d'octets se trouve ton curseur !
Ensuite, si tu connais la taille de ton fichier, alors tu pe utiliser une boucle for ! Tu va dire que je me contredit ! mais pas du tout ! c juste que ton idée consiste a chercher la taille du fichier avant de le copier ! alors que par habitude (et c le cas pour bcp de monde), on utilise le fichier direct, sans regarder sa taille avant !
Je suis fétigué ce soir, mais je vé t'écrire un morceo de code qd mm !
avec ta méthode :
FILE *fp,*fp2; char tmp; // tu n'a besoin que d'1 char, ne fé pas un tableo char temp[255]; int count=0,i=0; fp=fopen("test.txt","r"); fp2=fopen("test.txt","w");
fseek(fp,0,SEEK_END); //place le curseur a la fin du fichier count=ftell(fp); // récupère le nombre d'octets fseek(fp,0,SEEK_SET); // replace le cureseur au début du fichier
sprintf(temp,"Nombre d'octets : %d",count); MessageBox(temp,"",MB_OK); for (i=0;i<count;i++) { fread(&tmp,1,1,fp); fwrite(&tmp,1,1,fp2); } fclose(fp); fclose(fp2);
Autre solution :
FILE *fp,*fp2; char tmp[100]; fp=fopen("test.txt","rb"); fp2=fopen("test.txt","wb");
int n; { n = fread(tmp,1,100,fp); fwrite(tmp,1,n,fp2); }while ( !feof(fp) );
fclose(fp); fclose(fp2);
J'ai pas testé ! mais ca doit marcher ! Tu va me demander pk j'utilise un N, et pk j'ai mis le while a la fin ! Pour le N, c juste qu'au lieu de lire 1 seul octet a la fois, j'en lis 100 ! mais comme le fichier n'a pas forcément une taille multiple de 100, la fonction fread, te renvoi le nombre d'octets qu'elle a pu lire ! donc, dans fread, je lui écrit le mm nombre qu'elle a lu ! sinon, c pas bon ! Pour le while a la fin, c juste pour évitre de passer 2 fois le dernier bloc du fichier ! tu verra si tu teste !
j'ai rajouter un B, sur les fopen, pour ouvrir les fichier en binaire, histoire de ne pas être influencé par les caractères autres que alphanumériques !
Voilà ! Fini pour ce soir !
A+ NICO !
PS : amuse toi bien ! j'ai taper tout ca au pif ! alors y'a peut-être des erreurs !
------------------------------- Réponse au message : -------------------------------
En fait, il me refait une boucle infinie !
Mon code :
FILE *fp,*fp2; char tmp[1]; char temp[255]; int count=0,i=0; fp=fopen("test.txt","r"); fp2=fopen("test.txt","w"); while(feof(fp)==0) { count++; } sprintf(temp,"Nombre d'octets : %d",count); MessageBox(temp,"",MB_OK); while(i<count) { fread(tmp,sizeof( char ),1,fp); fwrite(tmp,sizeof( char ),1,fp2); i++; } fclose(fp); fclose(fp2);
------------------------------- Réponse au message : -------------------------------
Re ! Je ne sais pas ou tu as trouvé ta boucle for avec la comparaison, mais tu ne pourra jms avoir un code qui marche en faisant ca ! Dans le cas d'un fchier, tu ne c pas quelle est sa longueur ! Or, par définition, une boucle FOR se répète un nombre défini de fois ! c pas ce que tu ve ! Comm je te l'ai dit pour l'otre mess, utilise une boucle WHILE !
et pour tester si tu est a la fin du fichier, c'est FEOF regarde la doc pour ces fonctions, et tu verra que tu va trouver ton bonheur ! A+ NICO !
------------------------------- Réponse au message : -------------------------------
Si tu veux quil ny est plus de boucle infini il faut que tu testes la fin du fichier avec EOF
------------------------------- Réponse au message : -------------------------------
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
lundi 28 janvier 2002 à 20:38:07 |
Re : Lire toutes les chaines d'un fichier

JMGR
|
Merci :) Bonne nuit :)
------------------------------- Réponse au message : -------------------------------
Salut ! Ton idée est pas con, mais j'ai encore des critiques a faire ! Dans ton code, tu fé 2 boucle, ce qui te fé 2 fois plus de temps ! La première ne sert qu'a vérifier la taille du fichier, et pour ca, y'a des fonctions pour ca ! Par exemple, tu utilise fseek pour déplacer le curseur a la fin du fichier, puis ftell pour savoir a quel nombre d'octets se trouve ton curseur !
Ensuite, si tu connais la taille de ton fichier, alors tu pe utiliser une boucle for ! Tu va dire que je me contredit ! mais pas du tout ! c juste que ton idée consiste a chercher la taille du fichier avant de le copier ! alors que par habitude (et c le cas pour bcp de monde), on utilise le fichier direct, sans regarder sa taille avant !
Je suis fétigué ce soir, mais je vé t'écrire un morceo de code qd mm !
avec ta méthode :
FILE *fp,*fp2; char tmp; // tu n'a besoin que d'1 char, ne fé pas un tableo char temp[255]; int count=0,i=0; fp=fopen("test.txt","r"); fp2=fopen("test.txt","w");
fseek(fp,0,SEEK_END); //place le curseur a la fin du fichier count=ftell(fp); // récupère le nombre d'octets fseek(fp,0,SEEK_SET); // replace le cureseur au début du fichier
sprintf(temp,"Nombre d'octets : %d",count); MessageBox(temp,"",MB_OK); for (i=0;i<count;i++) { fread(&tmp,1,1,fp); fwrite(&tmp,1,1,fp2); } fclose(fp); fclose(fp2);
Autre solution :
FILE *fp,*fp2; char tmp[100]; fp=fopen("test.txt","rb"); fp2=fopen("test.txt","wb");
int n; { n = fread(tmp,1,100,fp); fwrite(tmp,1,n,fp2); }while ( !feof(fp) );
fclose(fp); fclose(fp2);
J'ai pas testé ! mais ca doit marcher ! Tu va me demander pk j'utilise un N, et pk j'ai mis le while a la fin ! Pour le N, c juste qu'au lieu de lire 1 seul octet a la fois, j'en lis 100 ! mais comme le fichier n'a pas forcément une taille multiple de 100, la fonction fread, te renvoi le nombre d'octets qu'elle a pu lire ! donc, dans fread, je lui écrit le mm nombre qu'elle a lu ! sinon, c pas bon ! Pour le while a la fin, c juste pour évitre de passer 2 fois le dernier bloc du fichier ! tu verra si tu teste !
j'ai rajouter un B, sur les fopen, pour ouvrir les fichier en binaire, histoire de ne pas être influencé par les caractères autres que alphanumériques !
Voilà ! Fini pour ce soir !
A+ NICO !
PS : amuse toi bien ! j'ai taper tout ca au pif ! alors y'a peut-être des erreurs !
------------------------------- Réponse au message : -------------------------------
En fait, il me refait une boucle infinie !
Mon code :
FILE *fp,*fp2; char tmp[1]; char temp[255]; int count=0,i=0; fp=fopen("test.txt","r"); fp2=fopen("test.txt","w"); while(feof(fp)==0) { count++; } sprintf(temp,"Nombre d'octets : %d",count); MessageBox(temp,"",MB_OK); while(i<count) { fread(tmp,sizeof( char ),1,fp); fwrite(tmp,sizeof( char ),1,fp2); i++; } fclose(fp); fclose(fp2);
------------------------------- Réponse au message : -------------------------------
Re ! Je ne sais pas ou tu as trouvé ta boucle for avec la comparaison, mais tu ne pourra jms avoir un code qui marche en faisant ca ! Dans le cas d'un fchier, tu ne c pas quelle est sa longueur ! Or, par définition, une boucle FOR se répète un nombre défini de fois ! c pas ce que tu ve ! Comm je te l'ai dit pour l'otre mess, utilise une boucle WHILE !
et pour tester si tu est a la fin du fichier, c'est FEOF regarde la doc pour ces fonctions, et tu verra que tu va trouver ton bonheur ! A+ NICO !
------------------------------- Réponse au message : -------------------------------
Si tu veux quil ny est plus de boucle infini il faut que tu testes la fin du fichier avec EOF
------------------------------- Réponse au message : -------------------------------
Salut, J'ai fait un programme qui charge toutes les chaines séparées par des espaces, et la boucle for ne se termine jamais, car la dèrnière chaine se lit à l'infini.
Code : char Chaines[1000][255]; FILE *fp; fp=fopen("fichier.txt","r"); for(int i=0;strcmp(temp,"");i++) { fscanf("%s",&temp); } fclose(fp);
|
|
|
Cette discussion est classé dans : fichier, lire, chaines, for, fp
Répondre à ce message
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|