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)

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

Sujets en rapport avec ce message

Lire dans un fichier [ par SfyLer ] C'est bon j'ai fini mon programme ! enfin presque ! :')J'aimerais lire dans un fichier, donc je l'ouvre et j'utilise ceci:char szBuffer[5000];while(!( Lire un fichier via HTTP [ par yugiohjcj ] Bonjour,je programme en C et je sais ouvrir/lire/écrire un fichier grâce à fopen() sur mon disque dur. Mais là, je veux faire exactement pareil sauf q lire une chaine de caractere dans un fichier et la camparer aux autres chaines dans le meme fichier [ par leiloula ] j'ai pa pu programmé un truc qui me permet de lire une chaine de caractere dans un fichier et la camparer aux autres chaines dans le meme fichier et v fprintf, fscanf ne marchent pas!!!! [ par thassa ] salut, je veux écrire les données d'un objet personne dans un fichier et puis de relire un objet personne à partir de ce fichier.et tout ceci en util lire d'une ficjier texte et affichage d'une matrice [ par Stiko ] slt,j ai un fichier texte danslequele se trouve une matrice dont les membres sonr séparés par des point- virgule.comment par un programme C++ je peux Voici une fonction pour lire des réels à partir d'un fichier texte sous Unix/Linux [ par zaim khelifi ] Ceci est une fonction qui lit des valeurs numériques réelles à partir d'un fichier texte, sous unix.le fichier contient des noeuds et leurs coordonnée Probleme de remplissage de structure [ par brute ] bonjour, Je dois lire un fichier de configuration (.cng) et remplir différents champs d'une structure. Pour lire le fichier j'utilise un filestream e Lire TOUT les caractères d'un fichier binaire [ par harddisk ] Lire dans un fichier structuré sous forme de tableau [ par Metrox ] Salut tout le monde!Alors, voilà mon problème: J'ai besoin de lire dans un fichier contenant des entiers mais structuré sous forme de tableau de 3 lig Lecture de fichier TXT [ par beb30 ] Voila je souhaite faire un programme en C qui me permette de retrouver une information de type Char rentrée manuellement. Je souhaite aller lire ds un


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.