Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pouvoir lire 'en dur' dans un fichier ? (je sais ce n'est pas clair)

3 réponses
Avatar
ctobini
Bonjour,

C'est une question g=E9n=E9rale car je ne sais pas du tout si ce dont je
vais parler est possible.

Je charge g=E9n=E9ralement de volumineux fichiers en m=E9moire lorsque je
dois en extraire des donn=E9es de mani=E8re non s=E9quentielle, ce qui
pourrit consid=E9rablement les performances de ma machine qui swappe
lors des calculs puisque tout mon fichier est en m=E9moire, alors que je
n'en ai plus besoin.

Est-il possible de lire 'en dur' dans un fichiers, c'est =E0 dire
d'avoir un moyen de 'baliser' un fichier afin d'avoir un acc=E8s disque
pour y lire les donn=E9es au lieu de tout stocker en m=E9moire ?

En vous remerciant,

C=2E Tobini

3 réponses

Avatar
Michel Rodriguez
ctobini wrote:

Je charge généralement de volumineux fichiers en mémoire lorsque je
dois en extraire des données de manière non séquentielle, ce qui
pourrit considérablement les performances de ma machine qui swappe
lors des calculs puisque tout mon fichier est en mémoire, alors que je
n'en ai plus besoin.

Est-il possible de lire 'en dur' dans un fichiers, c'est à dire
d'avoir un moyen de 'baliser' un fichier afin d'avoir un accès disque
pour y lire les données au lieu de tout stocker en mémoire ?


Si tu as repere l'endroit ou lire, tu peux utiliser seek pour y
retourner plus tard.

perldoc -f seek

--
mirod

Avatar
Emmanuel Florac
Le Tue, 26 Sep 2006 06:23:55 -0700, ctobini a écrit :


Est-il possible de lire 'en dur' dans un fichiers, c'est à dire d'avoir
un moyen de 'baliser' un fichier afin d'avoir un accès disque pour y lire
les données au lieu de tout stocker en mémoire ?


Par défaut Perl peut lire un fichier ligne par ligne, comme ceci :

open my $fh, "/un/fichier";

while ( <$fh> ) {
# Là j'ai lu une ligne et je peux la traiter
}

Le séparateur de ligne est n par défaut sous Unix, rn sous
VMS/DOS/Windows.
Mais si ton fichier contient déjà des séparateurs d'enregistrements
autres que n, tu peux redéfinir quel caractère utiliser pour définir
ce qu'est une ligne avec la variable spéciale $/.
Sinon comme dit précédemment, tu peux utiliser aussi seek...

--
on passe la moitié de son temps à refaire ce que l'on n'a pas eu le
temps de faire correctement.
Loi de Myers.

Avatar
Paul Gaborit
À (at) 26 Sep 2006 06:23:55 -0700,
"ctobini" écrivait (wrote):
Je charge généralement de volumineux fichiers en mémoire lorsque je
dois en extraire des données de manière non séquentielle, ce qui
pourrit considérablement les performances de ma machine qui swappe
lors des calculs puisque tout mon fichier est en mémoire, alors que je
n'en ai plus besoin.

Est-il possible de lire 'en dur' dans un fichiers, c'est à dire
d'avoir un moyen de 'baliser' un fichier afin d'avoir un accès disque
pour y lire les données au lieu de tout stocker en mémoire ?


Question classique. Réponse dans la FAQ. En français :

<http://perl.enstimac.fr/DocFr/perlfaq5.html#comment%20lire%20le%20contenu%20d'un%20fichier%20d'un%20seul%20coup&gt;

La solution en résumé... utiliser le module Tie::File !

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;