Lecture d un gros fichier texte

Résolu
Amanobuo
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
- 3 févr. 2006 à 14:56
Amanobuo
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
- 6 févr. 2006 à 21:43
Salut !
J aimerai savoir quoi utiliser pour ouvrir un "gros" fichier texte (environ 5ko)
avec fread, ca passe pas, ou j ai mal passe mes parametres... ?

Sinon, savez vous comment ouvir un fichier texte d'une lettre ou un mot definie a un autre mot ou lettre definie (ex : de '@' à ';').

8 réponses

cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
3
4 févr. 2006 à 10:39
Bonjour,

D'accord pour ta methode Kenilyk mais pour le malloc je ferais :

char * buffer = (char*)malloc(sizefile + 1);

memset(buffer, 0, sizefile + 1);
ou
buffer[sizefile] = '\0'; /* apres la lecture */

car c'est un fichier texte et donc je pense qu'il va s'en servir comme tel...

Matt...
3
CoyoteVsBeepBeep
Messages postés
41
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 mars 2006

3 févr. 2006 à 16:37
methode bourin si tu cherche pas les perfs :

FILE *file;
char c;
char buffer[5*1024]; //allocation en fonction de la taille de fichier (malloc)
UINT i=0;

m_text="";
m_hexa="";


file=fopen(m_file_path,"rb"); //read only


if(file==NULL)
{
return FALSE;
}


while(fscanf(file,"%c",&c)!=EOF)
{
buffer[i]=c,
i++;
}

fclose(file);

sinon t'as quoi pour fread ?

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
tu a mis la bonne valeur dans size et count ?
0
KeniiyK
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
3 févr. 2006 à 20:28
5Ko un gros fichier ????, enfin... :

// ouvre le fichier
FILE *file=fopen("fichier.txt","rb");
// deplace le curseur a la fin
fseek(file,0,SEEK_END);
// taille du fichier
long sizeFile=ftell(file);
// on se repositionne au debut
fseek(file,0,SEEK_SET);
// allocation
char * buffer=(char*)malloc(sizeFile);
// lecture
fread(buffer,1,sizeFile,file);
// ferme le fichier
fclose(file);

KeniiyK
0
Amanobuo
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

4 févr. 2006 à 19:36
ok, merci pour ces info !
cela marche tres bien,
cependant, quand je declare un char * buffer = (char*)malloc(sizefile + 1); dans ma fonction main, comment y acceder dans toutes mes autres fonctions (je ne peut pas declarer buffer en global, puisque il faut passer par main ou une autre fonction pour determiner sa taille).

Merci d avance :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
3
5 févr. 2006 à 17:58
Bonsoir,

Tu passes ton buffer dans l'appel de tes fonctions.N'oublie pas de liberer buffer quand tu ne t'en sers plus.

Matt...
0
KeniiyK
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
6 févr. 2006 à 09:40
Je ne suis pas du tout d'accord avec le '\0' en fin de buffer pour 2 raisons :
- on connait la taille donc pas besoin d'info en plus.
- imagine qu'il y ai déjà un '\0' dans le buffer par exemple dans un fichier binaire, ton '\0' ne sert plus a rien.

KeniiyK
0
cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
3
6 févr. 2006 à 19:40
bonsoir,

Ce n'est pas un fichier binaire, mais un fichier texte apparement... (et je l'ai précisé)

Matt...
0
Amanobuo
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

6 févr. 2006 à 21:43
re

C'est un fichier texte en effet.
Merci a vous tous pour ces info qui se completes bien ! j ai pu terminer cette partie de mon programme (en attendant de l optimiser, c'est deja un grand pas)

PS : 5Ko c'est pas mal pour un fichier texte (en nombre de caracteres), et le \0 fonctionne.

++
0