OVH Cloud OVH Cloud

unpack et nombres réel issus de VMS.

16 réponses
Avatar
Thierry Thomas
Bonsoir,

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 ?

Merci.
--
Th. Thomas.

6 réponses

1 2
Avatar
Paul Gaborit
À (at) 20 Mar 2007 19:38:45 GMT,
Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Oui, oui. Je voulais insister sur sysread() qui, dans ce cas, est
absolument nécessaire


Pourquoi donc ?


Pour lire les données dans un fichier binaire...

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


Avatar
Nicolas George
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.

À la rigueur un binmode si on est sous un OS ou une version de perl pourri,
mais c'est tout.

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


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

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


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

1 2