Re: Devoir de vacances : déchiffra ge de Streams

Philippe Laval <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Organization CNRS
Message-ID <[email protected]>
Jeffrey Carter a écrit :

> Philippe Laval wrote:
>
>>
>> J'essaie de lire un vieux fichier enregistré au format HP-LIF avec 
>> une machine depuis longtemps mise au rebut. Avec un éditeur hexa, on 
>> voit qu'après un en-tête facile à enlever le reste du fichier est 
>> composé de lignes de caractères précédées de 2 bytes : l'un est 00 
>> hexa et l'autre est le nombre de caractères de la ligne, en hexa. Par 
>> exemple 00,13,suivi de 19 caractères, 00,19 et 25 caractères, etc.
>> En lisant le fichier comme un Stream, avec Character'Read j'arrive à 
>> me positionner sur chaque 00 (ASCII.Nul), re-faire un Character'Read 
>> et lire ensuite chaque caractère jusqu'au 00 suivant. Mais je ne 
>> parviens pas à lire à lire le nombre hexa qui suit le 00 (à moins que 
>> ce 00 ne fasse partie du nombre, qui serait alors un entier sur 16 
>> bits).
>> Ni 'Pos() de ce qui a été lu avec Character'Read, ni Integer'Read, ni 
>> Short_Integer'Read, ni Short_Short_Integer'Read, ni aucune autre 
>> combinaison exotique que j'ai essayé ne me donnent la valeur de ce 
>> nombre.
>
>
> Est-ce que ce marche:
>
> type Byte is mod 2 ** 8
>
> Byte'Read
>
> ?

Non. Auparavant j'avais essayé, sans succès, ceci, inspiré du cours de 
D. Feneuille :
function Char_To_Byte is new Unchecked_Conversion (Character, Byte);
Character'Read (C);
Length := Char_To_Byte (C);

>
> Si non, est-ce que ce marche:
>
> package Byte_IO is new Ada.Sequential_IO (Byte);
>
> Byte_IO.Read (File, Dummy); -- 00
> Byte_IO.Read (File, Length);
>
> Get_String : for I in 1 .. Length loop
>    Byte_IO.Read (File, Value);
>    Char := Character'Val (Value);
>    -- Faire quelque chose avec Char
> end loop Get_String;
>
> ?
>
Le problème c'est Comment convertir la valeur de Length en entier pour 
servir de borne supérieure à la boucle Get_String ?
Avec Integer (Length), ou Byte'Val (Length), on ne trouve pas la bonne 
valeur : la première ligne du fichier à lire contient 66 caractères, or 
on trouve Length = 114,  ce qui n'est pas la bonne valeur ni en octal 
(on devrait trouver dans ce cas trouver 102), ni en hexadécimal (42).

Note pour Jean-Pierre Parsy : je n'avais pas envoyé de fichier 
attaché... Ce que tu as converti (smime.p7s)  est  sans doute un 
"footer"  ajouté par je ne sais pas quoi. En tout cas merci pour le 
programme Java, je vais étudier ça de près ; cependant à première vue 
j'ai peur qu'il ne réponde pas à ma question (je ne cherche pas à 
traduire le fichier en hexadécimal).

-- 
Philippe Laval
Observatoire océanologique
Villefranche-sur-Mer
Email:     [email protected]

_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
smime.p7s (application/x-pkcs7-signature, 3.5 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.