Menu

Fonctions à utiliser avec un fichier texte

Messages postés
26
Date d'inscription
samedi 23 février 2019
Statut
Membre
Dernière intervention
11 avril 2019
- - Dernière réponse : Natsuko410
Messages postés
26
Date d'inscription
samedi 23 février 2019
Statut
Membre
Dernière intervention
11 avril 2019
- 11 avril 2019 à 11:47
Bonjour, j'aimerais savoir si on peut utiliser les fonctions type fwrite, fread avec un fichier texte ? Ou s'il est préférable d'utiliser fscanf, fprintf ?
Afficher la suite 

Votre réponse

1 réponse

Messages postés
5056
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
26 avril 2019
931
0
Merci
Bonjour Natsuko410,

Pour lire et écrire du texte, tu devrais privilégier
fgets()
pour des lignes de texte ou
fscanf()
que tu mentionnes et pour écrire
fprintf()
. Ces deux dernières fonctions présentent aussi l'avantage de pouvoir lire et écrire en tenant compte du type des données manipulées.

fwrite()
et
fread()
servent normalement à écrire et lire des données binaires. Tu écris et tu lis des données binaires brutes, telles qu'elles sont organisées en mémoire sur ton architecture.

Pour cette raison,
fwrite()
n'est pas adaptée pour écrire des chaînes. Si tu écris un tableau de
char
, tu vas écrire la chaîne, y compris son caractère terminateur
'\0'
, avec éventuellement ce qui suit dans le tampon dont la capacité n'est pas utilisée, c'est à dire des données qui n'ont pas de sens (sauf si tu as précisément déterminé la taille en octets à écrire et qu'à la place du caractère null, tu écris les caractères requis par ton système pour un saut de ligne et un retour... bref, ce n'est pas pratique et pas fait pour).

Par contre, il y a des cas où il peut être utile d'utiliser
fread()
pour lire des blocs de données de texte, ou tout un fichier texte d'un bloc, pour le retraiter ensuite avec ton programme.

Par exemple, si tu as un gros fichier texte avec de nombreuses lignes, et que tu veux disposer de ces lignes en mémoire, tu peux lire tout le fichier texte d'un coup avec
fread()
, terminer ton tampon mémoire avec un
'\0'
pour avoir une très longue chaîne contenant toutes les lignes, et découper cette longue chaîne en sous-chaînes contenant chaque ligne avec
strtok()
en remplaçant en mémoire les
'\n'
par des
'\0'
et en notant dans un tableau de pointeurs les adresses mémoire de chaque chaîne trouvée.

C'est utile, par exemple, pour chercher un mot dans un dictionnaire de mots triés alphabétiquement que tu veux charger en mémoire et que tu n'as pas l'intention de modifier. J'en parlais là :

https://www.commentcamarche.net/forum/affich-35596363-recherche-par-ordre-alphabetique-dans-un-fichier#2

Cela donne un code très efficace et concis.

Dal
Natsuko410
Messages postés
26
Date d'inscription
samedi 23 février 2019
Statut
Membre
Dernière intervention
11 avril 2019
-
D'accord merci beaucoup ^^
Commenter la réponse de [Dal]