Lire un fichier ligne par ligne en C
Résolu
fleur_du_mal
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
fleur_du_mal Messages postés 23 Date d'inscription Statut Membre Dernière intervention -
fleur_du_mal Messages postés 23 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je souhaiterais savoir comment on peut lire un fichier ligne par ligne en langage C et stocker les donnees de la ligne lue dans une structure ou autre.
merci
je souhaiterais savoir comment on peut lire un fichier ligne par ligne en langage C et stocker les donnees de la ligne lue dans une structure ou autre.
merci
A voir également:
- Lire un fichier en c ligne par ligne
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Partager photos en ligne - Guide
- Lire un fichier epub - Guide
- Fichier bin - Guide
- Mètre en ligne - Guide
8 réponses
#include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; char c; pFile = fopen ( "monfichier.txt" , "r" ); while(c!=EOF) { while(c!='\n' && c!=EOF) { fread (c,sizeof(char),1,pFile); } } fclose (pFile); return 0; }
voila pour le principe après adapte le pour ta structure.
ou tout simplement getline() qui fait tout, tout seul.
http://man.developpez.com/man3/getline.3.php
http://man.developpez.com/man3/getline.3.php
pourtant elle est dans stdio et stdio est standard
Ouh là, raisonnement faux. Une extension GNU peut très bien être dans un header standard.
Un autre exemple : strerror_r() extension GNU et c'est défini dans string.h qui est standard. Pourtant strerror_r() n'est pas standard.
et si une fonction existe déjà, autant la récupérer (option GNU : source disponible).
Oui, et pas que GNU. D'ailleurs, c'est le principe des bibliothèques.
Dans tous les cas, getline() n'est pas portable, et si tu souhaites l'utiliser, il te faudra re-écrire la fonction. C'est ce que j'entendais par (se la créer soi-même). Il n'existe en C, aucune fonction portable permettant de lire une ligne entière dans un fichier.
stdio.h est standardisé
Oui, j'ai jamais dit le contraire.
une fonction qui ne l'ai pas ne devrai pas avoir sa place dans un en-tête standard
Ne devrait ou pas, ça se discute. En tout cas, force est de constater que toutes les fonctions qui se trouvent dedans ne sont pas forcément standard. Par exemple, getline(). D'ailleurs, tu ne verras pas le prototype getline() implanté dans stdio.h sur un compilateur non GNU puisqu'il s'agit d'une extension GNU. Pour t'en convaincre t'as qu'à regarder le man que tu as donné dans ton premier post, tu verras qu'à aucun moment il est dit que getline() est standard.
Par exemple il y a unistd.h qui regroupe des standards POSIX je crois.
Oui, je n'ai pas dit le contraire. Mais il faut garder à l'esprit qu'un header regroupe des prototypes de fonctions ayant un même but. Par exemple stdio.h regroupe les entrées/sorties comme le fait getline(). Il n'empêche que cette dernière n'est pas standard.
Je maintiens, il n'existe pas de fonctions standards permettant de lire une ligne entière dans un fichier. Il faut se la créer (bien sûr on peut s'inspirer).
Euuuh pas vraiment en fait, tu vas perdre enormement d'un point de vu appel systeme.
Utilise fget() ;)
Utilise fget() ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
@Flog78
Il vaut mieux utiliser fgetc() que fread() pour ce genre d'exercice.
En plus, tu compares "c" à EOF alors que la variable "c" n'est pas initialisée lors de la première itération.
@Fleur_du_mal
A noter que tu peux utiliser la fonction fgets qui lit directement une ligne, mais à condition de savoir la longueur maximale d'une ligne.
Si tu veux un exemple, n'hésite pas à demander.
Cdlt,
@Flog78
Il vaut mieux utiliser fgetc() que fread() pour ce genre d'exercice.
En plus, tu compares "c" à EOF alors que la variable "c" n'est pas initialisée lors de la première itération.
@Fleur_du_mal
A noter que tu peux utiliser la fonction fgets qui lit directement une ligne, mais à condition de savoir la longueur maximale d'une ligne.
Si tu veux un exemple, n'hésite pas à demander.
Cdlt,
Bonjour,
j'ai une question concernant fscanf, je souhaiterais l'utiliser pour récupérer des données d'un fichier. par ailleurs ce que j'aimerais bien que mon fscanf fasse c'est qu'il prenne en compte les espaces aussi.
j'ai une question concernant fscanf, je souhaiterais l'utiliser pour récupérer des données d'un fichier. par ailleurs ce que j'aimerais bien que mon fscanf fasse c'est qu'il prenne en compte les espaces aussi.