Bonjour,
J'avais une question à vous poser concernant la lecture d'un fichier: est ce possible d'accéder à la ligne 16 par exemple d'un fichier sans que je lise les 15 premières lignes?
Merci...
Bonjour,
J'avais une question à vous poser concernant la lecture d'un fichier: est ce possible d'accéder à la ligne 16 par exemple d'un fichier sans que je lise les 15 premières lignes?
Merci...
Question récurrente, c'est impossible.
Pour compléter la réponse de Melem, on peut s'en sortir à coup de fseek() si les lignes ont une taille fixe ou en gérant à la main un index de ligne.
Mais c'est assez complexe pour un gain qui est, sauf cas particulier, plutôt faible si ce n'est nul.
Que les lignes aient une taille fixe ne change rien. La doc de int fseek(FILE *stream, long int offset, int whence) dit bien :Envoyé par gl
For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier successful call to the ftell function on a stream associated with the same file and whence shall be SEEK_SET.Mais pour créer la table des index il faut avoir déjà lu toutes les lignes.Envoyé par gl
Oups ! Effectivement j'ai oublié de mettre en avant les habituelles restrictions de cette méthode.
Le fonctionnement n'est en effet pas garantie par le standard et n'est donc pas 100% portable. Bien qu'en pratique cela fonctionne plutôt bien sur les plate-formes que je connais (mais le code n'est pas portable).
Il est également possible de le faire lors de l'écriture du fichier. Mais surtout cela peut être fait une fois pour toute lors de la première lecture si le fichier est souvent lu mais jamais modifié.
Dans tous les cas ce n'est utilisable qu'en interne (i.e. pas question de transférer le fichier texte et l'index dans une autre environnement en espérant que ça marche).
Ceci étant, sauf cas particuliers, c'est assez inutile comme pratique.
bah..
La seule non-portabilité est le `\n' par rapport au '\n\r"...
Donc je trouve que la norme "abuse"...
Partager