Lire un fichier ligne par ligne en C
Résolu/Fermé
fleur_du_mal
Messages postés
23
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
26 août 2010
-
2 juil. 2010 à 09:55
fleur_du_mal Messages postés 23 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 26 août 2010 - 6 juil. 2010 à 09:16
fleur_du_mal Messages postés 23 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 26 août 2010 - 6 juil. 2010 à 09:16
A voir également:
- Lire un fichier en c ligne par ligne
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Site de vente en ligne particulier - Guide
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Lire fichier epub - 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.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
2 juil. 2010 à 12:05
2 juil. 2010 à 12:05
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
2 juil. 2010 à 12:57
2 juil. 2010 à 12:57
Sauf que getline() n'est pas standard. C'est même pas Posix.
En C, aucune fonction portable permet de lire une ligne entière dans un fichier. Il faut se la créer soi-même.
En C, aucune fonction portable permet de lire une ligne entière dans un fichier. Il faut se la créer soi-même.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
2 juil. 2010 à 15:05
2 juil. 2010 à 15:05
pourtant elle est dans stdio et stdio est standard... pas très propre GNU sur ce coup là.
et si une fonction existe déjà, autant la récupérer (option GNU : source disponible).
et si une fonction existe déjà, autant la récupérer (option GNU : source disponible).
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
2 juil. 2010 à 16:35
2 juil. 2010 à 16:35
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.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
2 juil. 2010 à 17:20
2 juil. 2010 à 17:20
stdio.h est standardisé, une fonction qui ne l'ai pas ne devrai pas avoir sa place dans un en-tête standard, voilà ce que je voulais dire. Par exemple il y a unistd.h qui regroupe des standards POSIX je crois.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
2 juil. 2010 à 22:58
2 juil. 2010 à 22:58
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).
fleur_du_mal
Messages postés
23
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
26 août 2010
1
2 juil. 2010 à 10:35
2 juil. 2010 à 10:35
merci je vais essayer ça
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
2 juil. 2010 à 10:48
2 juil. 2010 à 10:48
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
2 juil. 2010 à 10:54
2 juil. 2010 à 10:54
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,
fleur_du_mal
Messages postés
23
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
26 août 2010
1
2 juil. 2010 à 12:37
2 juil. 2010 à 12:37
merci à vous tous :)
fleur_du_mal
Messages postés
23
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
26 août 2010
1
6 juil. 2010 à 09:16
6 juil. 2010 à 09:16
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.