Nb de ligne d'un fichier [C, C++] - C++ - Programmation
Marsh Posté le 27-01-2003 à 18:13:49
Par exemple, un peu bourrin.
Code :
|
Mais rien ne t'empêche de lire le fichier d'un coup dans une grande chaine et de rechercher '\n' dans celle ci...
Marsh Posté le 27-01-2003 à 18:22:24
|
Marsh Posté le 27-01-2003 à 18:38:01
manquerait un +1 quelque part. (si la derniere ligne du fichier ne se termine pas par un '\n'
Marsh Posté le 27-01-2003 à 19:00:58
putain mais arretez avec vos EOF: on fait pas comme ça en C!!!!!
Code :
|
Marsh Posté le 27-01-2003 à 19:04:18
++Taz a écrit : putain mais arretez avec vos EOF: on fait pas comme ça en C!!!!!
|
mais keskidi?
Marsh Posté le 27-01-2003 à 19:13:54
regarde un topic c++ récent (lignes de ficheirs, je sais p^lus quoi).
en C, on ne se sert JAMAIS de feof pour détecter la fin de ficheir lors d'un parcours: on s'en sert uniquement pour caractèrisée les erreurs qui peuvent survenir.
Marsh Posté le 27-01-2003 à 19:28:48
++Taz a écrit : regarde un topic c++ récent (lignes de ficheirs, je sais p^lus quoi). |
Et pourquoi pas, après tout? Je vois pas intraséquement de raison pour pas le faire.
PS: ouai c encore moi, mais je suis très curieux de connaitre le fond de ton traumatisme avec EOF Je suis tjrs avide d'en apprendre plus
Marsh Posté le 27-01-2003 à 19:32:45
PARCE QU EN C EOF NE SURVIENT PAS QUAND ON ATTEIND LA FIN DU FICHIER (POINTEUR POSITIONNE APRES LA DERNIERE POSITION VALIDE) MAIS A LA PREMIERE LECTURE INFRUCTUEUSE!!!!!!!!!!
Marsh Posté le 27-01-2003 à 19:38:43
++Taz a écrit : PARCE QU EN C EOF NE SURVIENT PAS QUAND ON ATTEIND LA FIN DU FICHIER (POINTEUR POSITIONNE APRES LA DERNIERE POSITION VALIDE) MAIS A LA PREMIERE LECTURE INFRUCTUEUSE!!!!!!!!!! |
Alors je te renvoie à la doc de feof:
"feof retourne une valeur non nulle si l'indicateur de fin de fichier du flot stream est positionné."
Tiré de Le langage C par B.W. Kernighan et D.M. Ritchie edission de 1995
Bon alors sauf si je sais pas lire ou que je suis bien neuneu ( j'en doute mais bon c peut être un sursaut d'orgueuil on sait pas) feof renvoie un truc vrai si on a atteint la fin du fichier lors de la dernière opération de lecture. Non?
Marsh Posté le 27-01-2003 à 19:45:44
faut pas s'engueuler les gars
en tout cas merci , demain je testerais tt ca, car c un truc ke je fais au boulot et j'evite de m'y remettre le soir
Marsh Posté le 27-01-2003 à 19:50:17
LaMoR a écrit : faut pas s'engueuler les gars |
On s'engueule pas (pas encore ), on échange juste des points de vues. J'aime bien comprendre le point de vue des autres, ça m'aide à m'améliorer.
Marsh Posté le 27-01-2003 à 19:51:54
t'es neuneu mais feof renvoie effectivemnt l'etat du flag et comme tu le dis.
fais moi confiance! le K&R est certes flou, mais j'ai raison
Code :
|
fais moi confiance, je t'assure
edit: le K&R ne contient à mon souvenir aucun exemple d'utilisation de feof, pourtant beaucoup d'exercice traitent des fichiers, notemment wc
Marsh Posté le 27-01-2003 à 19:58:46
++Taz a écrit : t'es neuneu mais feof renvoie effectivemnt l'etat du flag et comme tu le dis.
|
J'aime pas les réponses comme ça. Et crois moi quand j'utilise feof je sais exactement ce que je fais (bon le dernier exemple en date en est pas trop la preuve, faut que j'arréte de tapper des codes àa la va vite pour répondre).
EDIT:
Pour conclure: effectivement si l'on souhaite être exostif dans le traitement d'erreur mieu vaut tester la valeur de retour de fgetc (par exemple).
Marsh Posté le 27-01-2003 à 20:01:59
bon, c'est pour vous. faudra pas venir se plaindre apres. je sors
Marsh Posté le 27-01-2003 à 20:03:32
++Taz a écrit : bon, c'est pour vous. faudra pas venir se plaindre apres. je sors |
Meu non t'enva pas c bien de signaler au gens qu'ils faut qu'ils fassent gaffe à ce qu'ils font.
Marsh Posté le 28-01-2003 à 06:43:15
++Taza écrit a écrit : putain mais arretez avec vos EOF: on fait pas comme ça en C!!!!! |
Ouaip.
LetoII a écrit a écrit : Alors je te renvoie à la doc de feof: "feof retourne une valeur non nulle si l'indicateur de fin de fichier du flot stream est positionné." |
Qui n'est positionné que quand une lecture à essayé d'aller au-delà de la fin du fichier.
Un feof() qui serait vrai dès le dernier octet lu ne serait d'aucune utilité pour les lectures de plus d'un octet:
Code :
|
Marsh Posté le 28-01-2003 à 07:58:09
Musaran a écrit : Ouaip. |
Jamais dit le contraire, même si j'ai fait preuve d'un peu de movaise fois(juste un peu) je crois pas avoir déformé la vérité.
EDIT: Ouai si en fait en relisant mon post je me suis rendu compte que j'ai pas trop été clair sur ce point, désolé
Marsh Posté le 28-01-2003 à 13:27:35
pourquoi ai-je la désagréable impression d'être à l'origine de tout ce bordel ?
Taz > ton explication est certes claire et bienvenue ! ceci dit, inutile de capser et de t'énerver, ça ne sert à rien du tout ! on connait tous ton penchant fort louable de nous encourager à écrire du code C/C++ standard, mais essaie quand même d'y mettre les formes.
je te renvoie aux réponses de Musaran, qui allie tact, diplomatie et compétences techniques indéniables, dans tous ses topics.
Marsh Posté le 28-01-2003 à 13:53:58
Merci
j'ai utiliser un bout du code a Taz, tous ca pour m'appercevoir ke ca ne servait a rien (ca marchait pourtant bien).
en fait j'ai fait avec la taille du fichier plutot k'avec les lignes..
en tt cas merci encore
Marsh Posté le 28-01-2003 à 15:08:00
je me suis un peu excité parce que ça fait le troisième topic ces derniers jours ou je soulevent le meme mauvais emploi de feof en C, car cette fonction diffère de celle du Pascal. merci musaran
sur cet exemple précis, effectivement, cela n'a pas d'incidence, s'il n'y a pas d'erreur lors de la lecture du fichier. mais dans tous les cas, il est beaucoup plus sure de tester les retours des fonctions E/S afin de détecter toutes les erreurs possibles. en effet fgetc peut renvoyer EOF sans que la feof soit vrai. donc prudence.
essayer de prendre des bonnes habitudes. (si vous n'etes toujours pas convaincus, regarder le nombre de topics du genre "lecture de fichier, derniere ligne en double" )
Marsh Posté le 28-01-2003 à 15:23:51
++Taz a écrit : essayer de prendre des bonnes habitudes. (si vous n'etes toujours pas convaincus, regarder le nombre de topics du genre "lecture de fichier, derniere ligne en double" ) |
le pire, c'est que dans mon algo, j'ai mis (!EOF) parce que j'avais la flemme de taper "tant que la fin du fichier n'est pas atteinte"
Marsh Posté le 28-01-2003 à 17:58:31
++Taz a écrit : je me suis un peu excité parce que ça fait le troisième topic ces derniers jours ou je soulevent le meme mauvais emploi de feof en C, car cette fonction diffère de celle du Pascal. merci musaran |
Rien a ajouté si ce n'est que je suis entièrement d'accord avec toi, comme quoi quand on s'explique clairment
Marsh Posté le 28-01-2003 à 18:17:34
putain, je viens de relire le topic, et je me suis rendu compte que c'est pas après moi que Taz en avait, mais après Fodger !!
le pire c que mon algo finalement ressemble bcp a ce que propose Taz
Marsh Posté le 29-01-2003 à 00:41:32
Harkonnen a écrit : pourquoi ai-je la désagréable impression d'être à l'origine de tout ce bordel ? |
Non, c'est C le fautif de ne pas être clair.
Pascal aussi d'ailleurs tiens.
La doc dit que "fseek(fd, 0, SEEK_END)" envoie à la fin du fichier.
J'ai dû faire un test pour déterminer que cela veut dire: [b]après[b] le dernier octet du fichier.
Citation : je te renvoie aux réponses de Musaran, qui allie tact, diplomatie et compétences techniques indéniables, dans tous ses topics. |
Complimenter ne suffit pas, il faut aussi se prosterner.
(j'y ai pris goût maintenant)
Marsh Posté le 29-01-2003 à 07:23:31
Musaran a écrit : |
Ha ouai... Je m'étais jamais posé la question remarque
Musaran a écrit :
Complimenter ne suffit pas, il faut aussi se prosterner. |
Marsh Posté le 29-01-2003 à 07:35:32
ça doit être parce que c'est tôt, mais j'ai pas compris pourquoi feof est dangereux. Je suis curieux de nature et j'aimerais comprendre. Mais ne me tapez pas.
Marsh Posté le 29-01-2003 à 07:41:00
Cherrytree a écrit : ça doit être parce que c'est tôt, mais j'ai pas compris pourquoi feof est dangereux. Je suis curieux de nature et j'aimerais comprendre. Mais ne me tapez pas. |
C pas que c dangereux c que tu teste qu'une des raison qui ferait que la lecture échoue grace à cette fonction. Si tu prend getc par exemple elle te renvoie EOF quand une erreur survient lors de la lecture où si tu as essayé de lire après le dernier caractère. Si tu ne vérifie pas la valeur de retour de getc et que tu te contante de tester la valeur de retour de feof tu ne peux détecter que le cas où tu lit après le dernier octet du fichier (cas le plus fréquant au demeurant). Si tu teste la valeur de retour de getc tu peux utiliser feof pour savoir si l'erreur vient du fait que tu as dépassé la taille du fichier et si non y a une fonction pour envoyer un message qualifiant l'ereur (tu peux aussi jeter un coup d'oeil à la variable erorno).
Ai-je bien résumé la chose?
Marsh Posté le 29-01-2003 à 07:42:55
ReplyMarsh Posté le 29-01-2003 à 07:43:58
Cherrytree a écrit : J'ai compris ! \o/ Merci http://yozakura.free.fr/hfr/letoii.gif |
Avant de me remercier attand de voir si j'ai pas dit de conneries
Marsh Posté le 29-01-2003 à 07:53:08
LetoII a écrit : |
Si j'ai compris, c'est que ce n'est sans doute pas faux.
Marsh Posté le 27-01-2003 à 17:13:10
Bonjour
Je sais k'il existe une fonction ki recupere le nb de carcteres d'une ligne : "strlen"
mais par contre existe-il une fonction ki recupere le nb de lignes d'un fichier ?