J'aurais voulu avoir votre avis concernant l'acces au fichier.
J'ai un fichier texte et j'aimerais acceder a la derniere ligne
pour recupere des infos. Le fichier est constitue de 3 colonnes i j val
i et j variant de 0 a respectivement nx et ny.
par consequent sur la derniere, j'ai acces a la taille .. (nx ny val)
Je ne sais pas si j'ai ete clair ...
Il y a 2 methodes :
la premiere consiste a faire des fgets sur chaque ligne jusqu'a la
derniere
et par consequent le dernier fgets a saisie la derniere ligne. Pas de
probleme.
Mais je trouve ca un peu bourrin, parce qu'ensuite je relis mon fichier
pour
recuperer tous les infos.
La deuxieme est d'utiliser les positionnements.
Je fais donc
fseek(file,0L,SEEK_END);
Mais je ne sais pas comment faire pour remonter d'une ligne ...
Je pensais remonter jusqu'a trouver dans le fichier jusqu'a
trouver le caractere fin de ligne, mais je viens de voir que pour une
ouverture
de fichier de type text stream on ne peut pas combiner SEEK_CUR avec un
offset different de 0.
La solution serait donc de l'ouvrir d'abord en binaire, d'aller a la fin
du fichier et remonter byte par byte (dans le cas des binary stream, on
peut combiner un SEEK_CUR avec un offset different de 0) jusqu'a '\n'
et ensuite de lire la ligne (qui correspond a la derniere).
Qu'en pensez-vous ?
Merci de votre aide.
Pascal
> La solution serait donc de l'ouvrir d'abord en binaire, d'aller a la fin
> du fichier et remonter byte par byte (dans le cas des binary stream, on
> peut combiner un SEEK_CUR avec un offset different de 0) jusqu'a '\n'
> et ensuite de lire la ligne (qui correspond a la derniere).
> Qu'en pensez-vous ?
C'est OK, sauf sur les systèmes où texte != binaire. Mais bon, tout
dépend de comment a été créé le fichier ou si le format du fichier
a été défini quelque part.
--
Vincent Lefèvre <vin...@vinc17.org> - Web: <http://www.vinc17.org/> - 100%
validated HTML - Acorn Risc PC, Yellow Pig 17, Championnat International des
Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA
> Dans l'article <3C5146EA...@ec-lyon.fr>,
> pascal bontoux <pascal....@ec-lyon.fr> écrit:
>
> > La solution serait donc de l'ouvrir d'abord en binaire, d'aller a la fin
> > du fichier et remonter byte par byte (dans le cas des binary stream, on
> > peut combiner un SEEK_CUR avec un offset different de 0) jusqu'a '\n'
> > et ensuite de lire la ligne (qui correspond a la derniere).
>
> > Qu'en pensez-vous ?
>
> C'est OK, sauf sur les systèmes où texte != binaire. Mais bon, tout
> dépend de comment a été créé le fichier ou si le format du fichier
> a été défini quelque part.
Je reponds a ta question malgre le fait que l'on soit un peu (completement)
HS. Je suis sous Unix et le fichier pourrait provenir d'un systeme quelconque.
C'est un fichier texte constitue de 3 colonnes i j val. i et j sont des entiers
et val est un reel.
Voili, voila
Encore merci
Pascal
> Je reponds a ta question malgre le fait que l'on soit un peu
> (completement) HS. Je suis sous Unix et le fichier pourrait provenir
> d'un systeme quelconque.
Sous Unix, mode texte = mode binaire. Ensuite, c'est à toi de deviner
la fin de ligne. En général, c'est LF, CR ou une combinaison des deux.
> J'aurais voulu avoir votre avis concernant l'acces au fichier.
> J'ai un fichier texte et j'aimerais acceder a la derniere ligne
> pour recupere des infos. Le fichier est constitue de 3 colonnes i j val
fgets()
> i et j variant de 0 a respectivement nx et ny.
> par consequent sur la derniere, j'ai acces a la taille .. (nx ny val)
> Je ne sais pas si j'ai ete clair ...
>
> Il y a 2 methodes :
> la premiere consiste a faire des fgets sur chaque ligne jusqu'a la
> derniere
> et par consequent le dernier fgets a saisie la derniere ligne. Pas de
> probleme.
Impeccable et portable.
> Mais je trouve ca un peu bourrin, parce qu'ensuite je relis mon fichier
> pour
> recuperer tous les infos.
rewind() et ca repart.
> La deuxieme est d'utiliser les positionnements.
> Je fais donc
> fseek(file,0L,SEEK_END);
Mode binaire uniquement.
<...>
> Qu'en pensez-vous ?
Pas portable. Le séparateur de lignes peut être CR, LF ou CR/LF ou ...
--
-ed- emdel at noos.fr
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-library: http://www.dinkumware.com/htm_cl/index.html
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
fget() est tres bien
tu place tous ca dans un tableau et tu referme ton fichier
"Emmanuel Delahaye" <emdel...@noos.fr> a écrit dans le message news:
Xns91A1BF13DF9...@130.133.1.4...
> fget() est tres bien
Pas standard.
[snip - merci de ne pas inclure le message d'origine en entier]
> fget() est tres bien
Fonction inconnue.
> tu place tous ca dans un tableau et tu referme ton fichier
Un fichier de 2 Go?
> "adsl" <adls...@wanadoo.fr> wrote in news:a2shfn$muq$1...@wanadoo.fr:
>
> > tu place tous ca dans un tableau et tu referme ton fichier
>
> Un fichier de 2 Go?
Facile... un gros malloc, un gros fread, et le tour est joué, même pas
mal... ;)
Mais bon. En mettant les bonnes balises, il peut toujours faire un mmap
sur le fichier, et se ballader en mémoire avec... D'accord, c'est pas
portable, c'est pour ça que j'ai précisé 'en mettant les bonnes balises'.
Aïe, pas taper!
--
Erwann ABALEA
erw...@abalea.com
-----
> Niveau mental, a-t-elle/il dit.
Pas d'affolement : remplace donc mental par Marengo, tomates et
champignons devraient t'aider à digérer beaucoup plus aisément.
-+-DM In : Guide du Neuneu d'Usenet - Comment servir le neuneu -+-