Je dois récupérer un lot de données techniques qui avaient été créées
par des programmes Pascal sur un Vax (VMS), avec des formats INTEGER ou
REAL.
J'avais pensé à faire un script Perl pour les lire, à cause d'unpack, et
effectivement je récupère très bien les entiers, en mettant 'V' dans le
template. Par contre, je n'ai rien trouvé pour les réels, et il semble
que ça ne soit pas prévu dans l'unpack standard.
Y aurait-il un module complémentaire qui permette de lire ces réels ?
Ça n'est absolument pas nécessaire, read fait très bien l'affaire.
À la rigueur un binmode si on est sous un OS ou une version de perl pourri, mais c'est tout.
Paul Gaborit
À (at) 21 Mar 2007 11:38:55 GMT, Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Pour lire les données dans un fichier binaire...
Ça n'est absolument pas nécessaire, read fait très bien l'affaire.
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
À la rigueur un binmode si on est sous un OS ou une version de perl pourri, mais c'est tout.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Mar 2007 11:38:55 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
Paul Gaborit wrote in message <wt9ircusvd2.fsf@vaugirard.enstimac.fr>:
Pour lire les données dans un fichier binaire...
Ça n'est absolument pas nécessaire, read fait très bien l'affaire.
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas,
pas 'readline' ou <...>.
À la rigueur un binmode si on est sous un OS ou une version de perl pourri,
mais c'est tout.
Le binmode est indispensable sur toutes les plateformes pour être sûr
que les longueurs demandées dans 'read' ou 'sysread' sont bien
interprétés en nombre d'octets et non en nombre de caractères.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Mar 2007 11:38:55 GMT, Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Pour lire les données dans un fichier binaire...
Ça n'est absolument pas nécessaire, read fait très bien l'affaire.
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
À la rigueur un binmode si on est sous un OS ou une version de perl pourri, mais c'est tout.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nicolas George
Paul Gaborit wrote in message :
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence avec une référence sur un entier.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage automatiquement sur les filehandles.
Paul Gaborit wrote in message <wt9aby6sr54.fsf@vaugirard.enstimac.fr>:
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas,
pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence
avec une référence sur un entier.
Le binmode est indispensable sur toutes les plateformes pour être sûr
que les longueurs demandées dans 'read' ou 'sysread' sont bien
interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage
automatiquement sur les filehandles.
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence avec une référence sur un entier.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage automatiquement sur les filehandles.
Paul Gaborit
À (at) 21 Mar 2007 16:17:02 GMT, Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence avec une référence sur un entier.
Là, ça devient du vice. ;-) Et puis, ça risque de ne pas marcher comme prévu si le fichier est réellement écrit en 'record' sur une machine qui reconnaît cette notion.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage automatiquement sur les filehandles.
(Ça existe des versions de perl pourries ?)
Automatiquement, certes non.
Mais pour un fichier binaire, à mon avis, mieux vaut prendre l'habitude de faire appel à binmode() systématiquement car d'une part c'est indispensable sur certaines plateformes et d'autre part, le jour où on réutilise son code, on peut oublier ce détail et l'utiliser avec un filehandle qu'on a ouvert par ailleurs, en ":utf8" par exemple.
Ceci étant, comme d'habitude, il y a toujours plusieurs manières de (bien) faire... ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Mar 2007 16:17:02 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
Paul Gaborit wrote in message <wt9aby6sr54.fsf@vaugirard.enstimac.fr>:
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas,
pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence
avec une référence sur un entier.
Là, ça devient du vice. ;-) Et puis, ça risque de ne pas marcher comme
prévu si le fichier est réellement écrit en 'record' sur une machine
qui reconnaît cette notion.
Le binmode est indispensable sur toutes les plateformes pour être sûr
que les longueurs demandées dans 'read' ou 'sysread' sont bien
interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage
automatiquement sur les filehandles.
(Ça existe des versions de perl pourries ?)
Automatiquement, certes non.
Mais pour un fichier binaire, à mon avis, mieux vaut prendre
l'habitude de faire appel à binmode() systématiquement car d'une part
c'est indispensable sur certaines plateformes et d'autre part, le jour
où on réutilise son code, on peut oublier ce détail et l'utiliser avec
un filehandle qu'on a ouvert par ailleurs, en ":utf8" par exemple.
Ceci étant, comme d'habitude, il y a toujours plusieurs manières de
(bien) faire... ;-)
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Mar 2007 16:17:02 GMT, Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Oui 'read' peut faire l'affaire (comme 'sysread'). Mais en tous cas, pas 'readline' ou <...>.
<...> peut servir également, en réglant $/ convenablement, en l'occurrence avec une référence sur un entier.
Là, ça devient du vice. ;-) Et puis, ça risque de ne pas marcher comme prévu si le fichier est réellement écrit en 'record' sur une machine qui reconnaît cette notion.
Le binmode est indispensable sur toutes les plateformes pour être sûr que les longueurs demandées dans 'read' ou 'sysread' sont bien interprétés en nombre d'octets et non en nombre de caractères.
Les versions de perl pas pourries ne mettent jamais de filtres d'encodage automatiquement sur les filehandles.
(Ça existe des versions de perl pourries ?)
Automatiquement, certes non.
Mais pour un fichier binaire, à mon avis, mieux vaut prendre l'habitude de faire appel à binmode() systématiquement car d'une part c'est indispensable sur certaines plateformes et d'autre part, le jour où on réutilise son code, on peut oublier ce détail et l'utiliser avec un filehandle qu'on a ouvert par ailleurs, en ":utf8" par exemple.
Ceci étant, comme d'habitude, il y a toujours plusieurs manières de (bien) faire... ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nicolas George
Paul Gaborit wrote in message :
(Ça existe des versions de perl pourries ?)
Les 5.6 initialisaient des filtres d'encodage automatiquement de manière un peu obscure en fonction des variables d'environnement de locales.
Paul Gaborit wrote in message <wt9lkhpr2tm.fsf@vaugirard.enstimac.fr>:
(Ça existe des versions de perl pourries ?)
Les 5.6 initialisaient des filtres d'encodage automatiquement de manière un
peu obscure en fonction des variables d'environnement de locales.