Lecture de BYTES et de CHARACTERE

cs_dbx99 Messages postés 19 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 23 novembre 2010 - 6 mai 2005 à 11:29
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 9 mai 2005 à 22:08
Problème avec mes fichiers binaires :

je fais une lecture dans un fichier binaire avec "readbyte" ou " readchar"

le fichier contient par ex "aaaéaaaèaaaff"

positionné sur le premier byte, je fais 11 fois readchar

il devrait retourner une chaîne "aaaéaaaèaaa" mais il retourne "aaaaaaaaaff"

je ne comprends pas, même si je lui dis de lire en byte "é = E9 en HEX 0u 233 en DEC"
il saute le byte pourquoi ???

Merci d'avance

DeepBlueX

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mai 2005 à 12:31
Salut
Langage ? VB6, VB.Net, VBA ?
... et sans tes lignes de code, ça va être dur de savoir où ça peut merdouiller ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
cs_dbx99 Messages postés 19 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 23 novembre 2010
6 mai 2005 à 14:06
VB .NET

Private
Sub TAGv2_Read(
ByVal MP3_File
As
String)



Dim TAGSize
As
Long



Dim FRAMESize
As
Long



Dim FRAME_ID
As
String



Dim MyFileInfo
As FileInfo



Dim I
As
Integer = 0



Dim MyASCII
As
Integer



'*******************************************************************



'*******************************************************************



'** Lecture du fichier en mode binaire et récupération du TAG V.2 **



'*******************************************************************



'*******************************************************************


MyBinary =
New BinaryReader(File.OpenRead(MP3_File))



' Placer la lecture au début du fichier


MyBinary.BaseStream.Seek(0, SeekOrigin.Begin)



' Lire les 3 premiers Bytes pour tester "ID3" : entête du TAG v2...


MyString2 = MyBinary.ReadChars(3)



If
Not MyString2 = "ID3"
Then


NotTAG2 += 1


MyBinary.Close()


TAGv1_Read(MP3_File)



Else



'Positionner le lecteur de Byte sur le premier Byte contenant la taille du TAG


MyBinary.BaseStream.Seek(6, SeekOrigin.Begin)



'Lire les 4 Bytes donnant la taille et convertir en décimale


TAGSize = MyBinary.ReadByte * 128 * 128 * 128


TAGSize += MyBinary.ReadByte * 128 * 128


TAGSize += MyBinary.ReadByte * 128


TAGSize += MyBinary.ReadByte



Do
While MyBinary.BaseStream.Position < TAGSize



'Positionner le lecteur de Byte sur le premier Byte contenant l'entête de la FRAME



'Lire les 4 Bytes donnant l'entête de la FRAME


FRAME_ID = MyBinary.ReadChars(4)



' Teste s'il existe un Header de Frame valide



Dim Header_OK
As
Integer = 0



For
Each MyFHeader
In Frames_Header



If FRAME_ID = MyFHeader
Then


Header_OK = 1



End
If



Next



' S'il n'y a plus de Header valide, écrire les infos récoltée dans la Base de données



If Header_OK = 0
Then


MyBinary.BaseStream.Seek(-1, SeekOrigin.End)



GoTo ENDTAG



End
If



'Positionner le lecteur de Byte sur le premier Byte contenant la taille de la FRAME


MyBinary.BaseStream.Seek(0, SeekOrigin.Current)



'Lire les 4 Bytes donnant la taille et convertir en décimale


FRAMESize = MyBinary.ReadByte * 128 * 128 * 128


FRAMESize += MyBinary.ReadByte * 128 * 128


FRAMESize += MyBinary.ReadByte * 128


FRAMESize += MyBinary.ReadByte



'Placer le lecteur après le FLAG et lire le contenu de la FRAME


MyBinary.BaseStream.Seek(2, SeekOrigin.Current)



'Lit le contenu de la FRAME



For I = 0
To FRAMESize - 1



For
Each MyASCII
In ASCII_Not_Used



If
Not MyBinary.ReadByte() = MyASCII
Then


MyBinary.BaseStream.Seek(-1, SeekOrigin.Current)



Else



GoTo NEXTCHAR



End
If



Next
'ICI J'AVAIS MyBinary.Readchar
'Entre temps j'ai solutionné avec la conversion chr


FRAME_Content &= Chr(MyBinary.ReadByte)


NEXTCHAR:



Next



'Met à jour les vaiables


I = 0


IsTAG2 += 1


MyTag2_Complete(FRAME_ID, FRAME_Content)


FRAME_Content = ""



Loop


ENDTAG:



'Ecrit dans la base de données


MyFileInfo =
New FileInfo(MyFile)



With myrec


.AddNew()


.Fields("atrist").Value = MyTag2.Artiste


.Fields("title").Value = MyTag2.Titre


.Fields("album").Value = MyTag2.Album


.Fields("year").Value = MyTag2.Annee


.Fields("comment").Value = MyTag2.Comment


.Fields("filename").Value = MyFileInfo.Name



'.Fields("genre").Value = MyGenre


.Update()



End
With



End
If



' Calculation de la taille du fichier en Kb


Taille = MyBinary.BaseStream.Length / 1024


MyBinary.Close()



End
Sub

DeepBlueX
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
6 mai 2005 à 18:45
Je trouve désolant qu'on puisse encore utiliser et qu'on utilise encore des GOTO avec un langage objet !!! Déjà qu'avec vb6 c'était pas top même pour la gestion d'erreurs....

Pourquoi ne pas revenir aussi aux GOSUB de l'an pépé pendant qu'on y est ?

Revois ton code sans utiliser de GOTO et je crois tu feras un grand pas. Si ça ne fonctionne toujours pas, repostes ton nouveau code, on pourra peut-être mieux t'aider.

Loup Gris
0
cs_dbx99 Messages postés 19 Date d'inscription mardi 14 novembre 2000 Statut Membre Dernière intervention 23 novembre 2010
9 mai 2005 à 18:15
Merci pour ton aide Lupus

malheureusement j'ai apris le VB avec un livre, et je désir maintenant passer à VB .NET. Je n'avais jamais fait de programmation avant.

Tu dis que le GOTO est démodé, alors dis moi pédagogiquement dans quelle direction m'orienter pour remplacer cela par du code correct.

Merci

DeepBlueX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
9 mai 2005 à 22:08
Je me considère aussi comme un débutant en vb.net. Il n'y a que quelques mois que j'y suis passé avec 1 semaine de formation hyper-condensée + beaucoup de tatonnements et d'essais et je ne connais pas encore toutes les subtilités de ce langage quoique les bases sont simples.
Il "suffit" de comprendre et savoir manipuler la prog "objet". En vb6, l'embryon était dans les modules de classe.
Je me vois mal reproduire ici ce concept dans son intégralité, le mieux est que tu cherches des tutos sur le net, google t'en indiquera plusieurs.
En dehors de ça, le GOTO est une réminiscence des premiers BASIC. Avec VB on peut et on doit s'en passer. C'est de la prog procédurale et plus de la prog séquentielle.
Dans quel bouquin as-tu appris le VB ?

Par ex :

--------------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous