Fichier + acces en fin

1 vue
Accéder directement au premier message non lu

pascal bontoux

non lue,
25 janv. 2002, 06:52:1025/01/2002
à
Salut tout le monde,

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

Vincent Lefevre

non lue,
25 janv. 2002, 07:47:4625/01/2002
à
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.

--
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

pascal bontoux

non lue,
25 janv. 2002, 09:04:4725/01/2002
à
Vincent Lefevre wrote:

> 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

Vincent Lefevre

non lue,
25 janv. 2002, 08:42:1525/01/2002
à
Dans l'article <3C5165FF...@ec-lyon.fr>,
pascal bontoux <pascal....@ec-lyon.fr> écrit:

> 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.

Emmanuel Delahaye

non lue,
25 janv. 2002, 12:47:0125/01/2002
à
pascal bontoux <pascal....@ec-lyon.fr> wrote in
news:3C5146EA...@ec-lyon.fr:

> 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/

adsl

non lue,
25 janv. 2002, 16:10:1525/01/2002
à
salut

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...

Vincent Lefevre

non lue,
25 janv. 2002, 19:15:5325/01/2002
à
Dans l'article <a2shfn$muq$1...@wanadoo.fr>,
adsl <adls...@wanadoo.fr> écrit:

> fget() est tres bien

Pas standard.

[snip - merci de ne pas inclure le message d'origine en entier]

Emmanuel Delahaye

non lue,
26 janv. 2002, 01:58:0726/01/2002
à
"adsl" <adls...@wanadoo.fr> wrote in news:a2shfn$muq$1...@wanadoo.fr:

> fget() est tres bien

Fonction inconnue.

> tu place tous ca dans un tableau et tu referme ton fichier

Un fichier de 2 Go?

Erwann ABALEA

non lue,
26 janv. 2002, 12:26:1026/01/2002
à
On 26 Jan 2002, Emmanuel Delahaye wrote:

> "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 -+-

Répondre à tous
Répondre à l'auteur
Transférer
0 nouveau message