Fonctions à utiliser avec un fichier texte

Résolu/Fermé
Natsuko410 Messages postés 32 Date d'inscription samedi 23 février 2019 Statut Membre Dernière intervention 11 mai 2019 - 8 avril 2019 à 21:17
Natsuko410 Messages postés 32 Date d'inscription samedi 23 février 2019 Statut Membre Dernière intervention 11 mai 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 ?
A voir également:

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 9 avril 2019 à 12:40
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://forums.commentcamarche.net/forum/affich-35596363-recherche-par-ordre-alphabetique-dans-un-fichier#2

Cela donne un code très efficace et concis.

Dal
1
Natsuko410 Messages postés 32 Date d'inscription samedi 23 février 2019 Statut Membre Dernière intervention 11 mai 2019
11 avril 2019 à 11:47
D'accord merci beaucoup ^^
0