begin process at 2012 05 30 03:32:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Lire toutes les chaines d'un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lire toutes les chaines d'un fichier

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ée 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 fichiers en C [ par boualiasma ] Salut, 1) Dans mon travail, j'utilise des fichiers. je crée un fichier "essai.txt" pour le remplir fp = fopen("essai.txt","w"); // je fais des tra ECRITURE FICHIER LOGFONT [ par lectpe ] Bonjourdans mon application, j'utilise un fenêtre de dialogue de sélection de police d'écriture :VOID SelectMainFont(HWND hwnd, HWND hRichEdit){   Zer tri alphabétique ultra rapide de chaines de caractères de longueur variable [ par mslider ] -- Bonjour, je sais que c'est un forum dédié au C mais je vais parler de pascal. En effet je connais bien ce langage et je l'ai utilisé pour trier a ouverture d'un gros fichier txt ( taille > 3Mo) [ par malouve ] Bonjour, J'ai a traité des fichiers txt de valeurs dont je ne connais pas le nombre d'elements mais qui font plus de 3Mo. J'ai essayé la fonction fre Optimisation fread() découpe de fichier [ par tbpacker ] Bonjour à tous,Je me demandais pour l'utilisation de fread dans quels cas d'argument a t'on les meilleures performances?1-Lire un packet de n octets 1 lire et ecrire dans un fichier [ par b4zeus ] bonjour tout le monde, j'ai un probleme qui est que je ve transformé un fichier median.dat sous la forme8 5 -1 8 4 -1 8 3 -19 3 -1 9 2 -1 9 1 -1et cré traitement d'un fichier [ par boualiasma ] Salut,J'ai un fichier texte bien formé contient deux champs: objet et attribut.tous les objets sont des entiers et tous les attributs sont de chaines


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,465 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales