Lire un fichier a l'envers en C (pas C++)

B_R_ Messages postés 1 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 9 juin 2004 - 9 juin 2004 à 19:10
cs_zelastwarrior Messages postés 33 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 juin 2005 - 9 juin 2004 à 23:58
Bonjour,

Je suis à une position donnée dans un fichier (apres plusieurs fgets() )
et j'ai besoin de recupérer un bloc de taille indefinie (mais marqué par des balises) précédant ma position actuelle.

Comment faire cela? Le fichier à parser est potentiellement tres gros, je peux pas tout mettre en mémoire. Et les fonctions standards de stdio.h ne permettent pas la lecture en sens inverse...

Une idée ?

Merci
BR

3 réponses

cs_zelastwarrior Messages postés 33 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 juin 2005
9 juin 2004 à 21:29
ben je sais pas si c vraiment une bonne idée mais au depart je pensé comme toi !! avec des fqqchose. essai des methode de lecture de plus bas nivo.
comme read() et write(). si besoin de plus d'info contacte moi sinon l'aide est pas mal faite aussi
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
9 juin 2004 à 21:58
tu veux récupérer un bloc de taille n. Comme tu peux pas tout mettre en mémoire, tu prend dans des bloc de 1024 par exemple.

tant que n > 1024
{
tu recules de 1024, tu lis 1024 et tu recules de 2048, et tu inverses la chaine (la ca peut être long)
tu enleves 1024 à n
}
tu lis n caractères et tu inverses
0
cs_zelastwarrior Messages postés 33 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 juin 2005
9 juin 2004 à 23:58
non pas vraiment si compliqué que ca !!!
en fait tu as un pointeur sur un fichier !!
fic = open (syntaxe);
fic en fait correspond a la position du pointeur ds le fichier.
Alors avec une Zolie fction tu le met a la fin de ton fichier (il en existe une en c filelenght (un truc ds ce genre)). Ensuite ton pointeur tu le fait reculer de 2 fois ton avancement pour que qd tu avance tu retombe a la fin d'ou tu veux tomber.
nota g employé cette methode a l'endroit pour lire un fichier mais bon ca marche aussi a l'envers!! et ton raisonnement été bon. je le confirme. a bientot
0