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

Lire un fichier binaire en vb

20 réponses
Avatar
Superman
Bonjour,

Je suis un novice dans le monde du VB et il faut que je lise un
fichier binaire constitu=E9e commme ceci :

le fichier contient n enregistrements

chaque enregistrement est constitu=E9e de :
une taille sur 1 octet
un num sur 21 octets
une date sur 4 octets
un autre num sur 21 octets
puis de n bloc de 2 octets

J'aurais besoin d'aide s'il vous plait :
J'ai deja commencer =E0 coder :


dim taille as integer

Open "nom fichier" For Binary As #f
get, ,integer

et puis ensuite je ne sais pas trop quoi faire.... pour le bloc de 21
octets sachant qu'en plus je dois inserer tout ceci dans un fichier
texte ensuite...

Merci de votre aide !

Maxime

10 réponses

1 2
Avatar
Aski
Hello Superman,

Tu as savamment écrit :

Bonjour,

Je suis un novice dans le monde du VB et il faut que je lise un
fichier binaire constituée commme ceci :

le fichier contient n enregistrements

chaque enregistrement est constituée de :
une taille sur 1 octet
un num sur 21 octets
une date sur 4 octets
un autre num sur 21 octets
puis de n bloc de 2 octets

J'aurais besoin d'aide s'il vous plait :
J'ai deja commencer à coder :


dim taille as integer

Open "nom fichier" For Binary As #f
get, ,integer

et puis ensuite je ne sais pas trop quoi faire.... pour le bloc de 21
octets sachant qu'en plus je dois inserer tout ceci dans un fichier
texte ensuite...

Merci de votre aide !

Maxime



Tu as intérêt à définir un type enregistrement contenant les variables de
chaque enregistrement, à définir un variable tableau de ce type que tu
dimensionnes à n.
Avatar
Superman
On 15 juin, 18:20, "Aski" wrote:
Hello Superman,

Tu as savamment écrit :





> Bonjour,

> Je suis un novice dans le monde du VB et il faut que je lise un
> fichier binaire constituée commme ceci :

> le fichier contient n enregistrements

> chaque enregistrement est constituée de :
> une taille sur 1 octet
> un num sur 21 octets
> une date sur 4 octets
> un autre num sur 21 octets
> puis de n bloc de 2 octets

> J'aurais besoin d'aide s'il vous plait :
> J'ai deja commencer à coder :

> dim taille as integer

> Open "nom fichier" For Binary As #f
> get, ,integer

> et puis ensuite je ne sais pas trop quoi faire.... pour le bloc de 21
> octets sachant qu'en plus je dois inserer tout ceci dans un fichier
> texte ensuite...

> Merci de votre aide !

> Maxime

Tu as intérêt à définir un type enregistrement contenant les vari ables de
chaque enregistrement, à définir un variable tableau de ce type que tu
dimensionnes à n.- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



J'ai fais une structure mais gros probleme c'est comment transformer
de l'ascii que je récupere dans mes string en texte pour le mettre
dans mon fichier txt
Avatar
Aski
Hello Superman,

J'ai fais une structure mais gros probleme c'est comment transformer
de l'ascii que je récupere dans mes string en texte pour le mettre
dans mon fichier txt



Je n'ai pas compris ce que tu veux faire. S'il s'agit de conversions en
chaînes de caractères, utilise les fonctions
CStr() et Format$()
De plus Format$() te permet des formats prédéfinis ou personnalisés
Avatar
tking
Superman a formulé ce vendredi :
Bonjour,

Je suis un novice dans le monde du VB et il faut que je lise un
fichier binaire constituée commme ceci :

le fichier contient n enregistrements

chaque enregistrement est constituée de :
une taille sur 1 octet
un num sur 21 octets
une date sur 4 octets
un autre num sur 21 octets
puis de n bloc de 2 octets

J'aurais besoin d'aide s'il vous plait :
J'ai deja commencer à coder :


dim taille as integer

Open "nom fichier" For Binary As #f
get, ,integer

et puis ensuite je ne sais pas trop quoi faire.... pour le bloc de 21
octets sachant qu'en plus je dois inserer tout ceci dans un fichier
texte ensuite...

Merci de votre aide !

Maxime




Une solution, c'est de recuperer un enregisrement complet, donc
1+21+4+21+2 et ensuite de travailler sur sa structure.

Avec un

# 49 = 1+21+4+21+2

Dim buf as string * 49

puis

open ...

get, ,buf

#

Chaque "get" recupere un enregistrement dans buf. Après tu peux
decouper avec "mid$"

taille = mid$(buf,1,1)
num = mid$(buf,2,21)
...


A tester !
Avatar
Superman
Je vais tester tout ce que vous m'avez proposer !

Alors en fait ce que je veux faire c'est extraire chaque
enregistrement et ensuite les mettre sur un fichier texte. mon
probleme c'est que lorsque j'utilise :

dim test as string * 21 par exemple
lorsque j'utilise get je recupere bien 21 octets mais le probleme
c'est que c'est en ascii alors que moi je veux par exemple une numero
de serie ou qqch comme ca j'espere vous avoir ecliarer un peu et merci
bq de votre aide !!
Avatar
tking
Superman avait écrit le 15/06/2007 :
Je vais tester tout ce que vous m'avez proposer !

Alors en fait ce que je veux faire c'est extraire chaque
enregistrement et ensuite les mettre sur un fichier texte. mon
probleme c'est que lorsque j'utilise :

dim test as string * 21 par exemple
lorsque j'utilise get je recupere bien 21 octets mais le probleme
c'est que c'est en ascii alors que moi je veux par exemple une numero
de serie ou qqch comme ca j'espere vous avoir ecliarer un peu et merci
bq de votre aide !!





Si ton string est "0123456789" tu peux le convertir avec val()

Dim MyValue
MyValue = Val("2457") ' Renvoie 2457.
MyValue = Val(" 2 45 7") ' Renvoie 2457.
MyValue = Val("24 et 57") ' Renvoie 24.


Tu as l'aide avec F1.

Asc, fonction

CBool, fonction

CByte, fonction

CCur, fonction

CDate, fonction

CDec, fonction

CDbl, fonction

Chr, fonction

CInt, fonction

CLng, fonction

CSng, fonction

CStr, fonction

CVar, fonction

CVErr, fonction

Format, fonction

Hex, fonction

Oct, fonction

Str, fonction

Val, fonction




Crée une feuille avec un bouton et un text1.text en multi-line si
besoin.

Ouvre ton fichier avec ça et donne le résultat ici si ça peut aider à
comprendre.

______________________________

Private Type Record ' Désigne un type défini par l'utilisateur.
Name As String * 1
End Type
______________________________

Private Sub Command1_Click()
Text1.Text = ""

Dim MyRecord As Record

Open "c:test.txt" For Binary As 1
Do While Not EOF(1)
Get #1, , MyRecord

Text1.Text = Text1.Text & MyRecord.Name & ":"

Loop
Close
End Sub

_______________________________
Avatar
Aski
Hello Superman,

Tu as savamment écrit :

Je vais tester tout ce que vous m'avez proposer !

Alors en fait ce que je veux faire c'est extraire chaque
enregistrement et ensuite les mettre sur un fichier texte. mon
probleme c'est que lorsque j'utilise :

dim test as string * 21 par exemple
lorsque j'utilise get je recupere bien 21 octets mais le probleme
c'est que c'est en ascii alors que moi je veux par exemple une numero
de serie ou qqch comme ca j'espere vous avoir ecliarer un peu et merci
bq de votre aide !!



Donne-nous un exemple de ces octets récupérés pour qu'on comprenne bien. Il
sera ainsi plus facile de t'aider.
Avatar
Fred
Dans : news:%,
Aski disait :

Donne-nous un exemple de ces octets récupérés pour qu'on comprenne
bien. Il sera ainsi plus facile de t'aider.



Tout à fait.
Ignorant la structure du fichier, on ne peut que proposer des solutions
non adaptées. À moins d'avoir beaucoup de chance.

Superman, je te propose l'utilisation de la fonction suivante :

Function TestFichier(nom As String) _
As String

Dim buf(255) As Byte
Dim i As Integer
Dim hexa As String

Open nom For Binary As #1
Get #1, , buf
i = 0
While i < 256
hexa = hexa & _
UCase$(Right$("0" _
+ Hex$(buf(i)), 2)) _
& " "
i = i + 1
If i Mod 16 = 0 Then
hexa = hexa & vbCrLf
End If
Wend
Close #1
TestFichier = hexa
End Function

Dans une Form, tu place un TextBox multiligne (TextBox1)
et tu place la ligne suivante dans une procédure (de bouton par
exemple).

TextBox1.Text = TestFichier("ici le chemin d'accès au fichier")

Tu copies/colles le résultat ici et on sera à même de te donner des
indications correctes.
À moins, bien sûr, que ces informations soient confidentielles.
Dans ce cas, tu as peut-être une documentation sur laquelle on pourrait
s'appuyer.

Pour ma part, je pense que la solution de la structure proposée
initialement par Aski est la bonne, mais on ne peut deviner ce qu'il
faut mettre dedans, pour l'instant. Et il faudra probablement la mixer
avec autre chose car il y a une partie variable dans tes enregistrements
de fichier.

Cela pourrait être :
Type entete
taille As Byte
num1(20) As Byte
date As Date
num2(20) As Byte
End Type

ou bien

Type entete
taille As Byte
num1 As String*21
date As Date
num2 As String * 21
End Type

Je penche pour cette seconde option.

Tu parles de n blocs de 2 octets.
D'où vient le n ? Tu veux dire que le fichier est entièrement rempli de
ces blocs jusqu'à la fin ?
2 octets représentant quoi ? Dois-tu les sortir comme deux octets
indépendants, ou bien comme un entier 16 bits ?

L'algorithme pourra ressembler à cela :

Type entete
taille As Byte
num1 As String * 21
date As Date
num2 As String * 21
End Type

Type bloc
lsb As Byte
msb As Byte
End Type

Sub TraiterFichier(nom As String)
Dim f As Integer
Dim e As entete
Dim b As bloc
f = FreeFile
Open nom For Binary As f
Get f, , e
'Traitement de e
While Not EOF(f)
Get f, , b
'Traitement de b
Wend
Close f
End Sub




--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Fred
Dans : news:OMLlCE$,
Fred disait :

Superman, je te propose l'utilisation de la fonction suivante :




J'ai oublié de préciser que la fonction de test lit les 256 premiers
octets du fichier.
Si les fichiers sont plus petits, il faudra peur-être adapter cette
borne que j'ai eu la flemme de rendre paramétrable !

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
LE TROLL
Bonjour,

Je n'ai pas lu toutes les réponses, mais je
vois que tu écris:

puis de n bloc de 2 octets

Le problème est qu'il faut que tu sois en
mesure de savoir où s'arrête chaque
enregistrement, sinon tu ne pourras rien faire si
"n" est une variable...

Il faudrait d'abord faire une lecture avec
recherche de chaque début d'enregistrement, et
isoler ces derniers dans une structure adéquate
(variable, fichier)...
Puis seulement ensuite, le passer dans les
variables appropriées qui vont restituer la
valeur, avant le transfert en texte...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Superman" a écrit dans le
message de news:

Bonjour,

Je suis un novice dans le monde du VB et il faut
que je lise un
fichier binaire constituée commme ceci :

le fichier contient n enregistrements

chaque enregistrement est constituée de :
une taille sur 1 octet
un num sur 21 octets
une date sur 4 octets
un autre num sur 21 octets
puis de n bloc de 2 octets

J'aurais besoin d'aide s'il vous plait :
J'ai deja commencer à coder :


dim taille as integer

Open "nom fichier" For Binary As #f
get, ,integer

et puis ensuite je ne sais pas trop quoi faire....
pour le bloc de 21
octets sachant qu'en plus je dois inserer tout
ceci dans un fichier
texte ensuite...

Merci de votre aide !

Maxime
1 2