Lecture de caractères spéciaux [Résolu]

Signaler
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005
-
Messages postés
58
Date d'inscription
jeudi 30 décembre 2004
Statut
Membre
Dernière intervention
21 septembre 2007
-
Bonjour à tous




J'ai sérieusement besoin d'aide au risque de finir par atomiser mon pc
qui pourtant doit être innoscent mais vous saver ce que c'est quand y a
des erreurs c'est jamais de la faute du coupable



Enfin bref venons en au fait



Je dois lire un fichier Hexa en particulier l'entête.



Dans cet entête se trouve une info placé après un certain offset.



Elle est écrite en hexa mais codée en décimal, je m'explique si la
valeur hexa lue est (10)h la donné en décimal à affiché est bien 10 et
non 16 jusque là C assez clair je pense.



donc j'ouvre le fichier en binary mode et je lit 4 caractères ASCII (donc 8 chifre hexa que je sépare en 4 groupes) .



par la commande suivante je convertis ce caractère Ascii pour afficher la valeur Hexa:




Open File1.Path & "" & File1.FileName For Binary As #intFNum


For offset = 1921 To 1924


Seek #intFNum, offset


Input #intFNum, trame(j)


j = j + 1


Next offset


Close intFNum



Text1.Text = Hex(Asc(trame(1))) 'où Tram(1) est la première case d'un tableau de 4 cases





ça marche impécable



Mais quel est donc le problème dans ce cas????



He bien quand la valeur hexa à lire est (22)h donc le caractère ascii
( " ), VB me donne une valeur qui n'a rien à voir .

j'ai d'abord cru que le programme allait lire au mauvais endroit mais
si à l'aide d'un editeur hexa je met (23)h à la place de (22)h ça passe
j'obtient bien 23 et si je met 21 pareil, ça marche. J'ai alors penser
que la convertion pouvais avoir un problèmes avec ce caractère mais il
n'en est rien, si je fais



trame(3) = """

Text3.Text = Hex(Asc(trame(3)))



Le résultat obtenu est bien 22



J'en déduit que le problèmes est dans la lecture



Alors voila si quelqun peut me venir en aide pour me dire quoi faire
hormis appeler un exorciste ou d'atomiser mon pc car encore une fois je
parie que je suis bien le seul au monde à ne pas être au courant de la
petite subtilité que vous aller m'expliquer .



Merci

19 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Je t'ai répondu lors de ton précédent post. Mais bon, visiblement ça ne doit pas te convenir, dans ce cas, montre ton code de lecture du fichier.

Loup Gris
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Donc, ça devrait marcher avec ça :

Dim trame(4) As String * 1
Dim j As Integer
Dim offset As Long
Open File1.Path & "" & File1.FileName For Binary Access Read As #intFNum Len = 1
For offset = 19 To 23
Get #intFNum, offset, trame(j)
j = j + 1
Next offset
Close #intFNum
MsgBox trame(0)

Loup Gris
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
un fichier ouvert en binaire ça se lit avec Get

Daniel
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Et donne nous aussi la déclaration de tes variables, ça peut etre utile.




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005

Tu pourrais me donner la synthaxe pour Get stp? pcq avec unput ça marche très bien sauf ce caractère
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005

la suite est donné dans la partie j'ai besoin d'aide, (j'ai posté deux
fois le même truc car je l'avais mit dans j'ai besoin d'aide et puis
j'ai penser que de TEXTE ça irrait plus vite pour obteir une réponce
enfin bref)
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Daniel > pas seulement, les 2 façons suivantes donnent le même résultat et perso, j'utilise Get plutot en mode Random :

Dim s As String * 1
Open "c:\temp\toto.txt" For Binary Access Read As #1 Len = Len(s)
Get #1, , s
Close #1
Text1.Text = Hex(Asc(s))



Dim s As String
Open "c:\temp\toto.txt" For Binary Access Read As #1
s = Input(1, #1)
Close #1
Text1.Text = Hex(Asc(s))

C'est au choix, j'aimerais seulement savoir comment Fabk01 lit son fichier, ça m'intrigue car je n'ai pas réussi à reproduire l'erreur.

Loup Gris
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
la virgule, les guillemets sont des caractères de séparation réservé pour Input.

For offset = 1921 To 1924
Get #intFNum, offset,trame(j)
j = j + 1
Next offset

Daniel
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Daniel> la virgule, les guillemets sont des caractères de séparation réservé pour Input.

Plus d'explication stp, le msdn dit justement que :



Contrairement à l'instruction Input #, la fonction Input renvoie
tous les caractères lus, y compris les virgules, les retours chariot, les sauts
de ligne, les points d'interrogation et les espaces à gauche



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
oui mais il a mis input #, c'est pour ça ...

sinon si trame est un tableau de bytes de 4 un seul get suffit:
Dim trame(3) As Byte
Get #intFNum, 1921,trame(0)

Daniel
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005

Voila la partie du code concerné





Dim trame(4) As String * 1



Open File1.Path & "" & File1.FileName For Binary Access Read As #intFNum

For offset = 19 To 23

Seek #intFNum, offset

Input #intFNum, trame(j)

j = j + 1

Next offset

Close intFNum



Text1.Text = Hex(Asc(trame(1)))

j'ai beau refaire et refaire les test Trame(1) ne contiend pas (")
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005

je précise que je suis pas du tout informaticien mais electronicien
donc il serait cool de me mettre mon code et eventuellement me mettre
ce qui va pas en couleur (rouge) et ce que je devrais mettre à la place
en vert ou un truc du genre

Merci beaucoup en tous cas de m'accorder du temps
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Daniel >oui mais il a mis input #, c'est pour ça ...



Oupss pas vu effectivement.



Fabk01 > essaye plutot ça :



Dim trame(4) As String * 1



Open File1.Path & "" & File1.FileName For Binary Access Read As #intFNum

For offset = 19 To 23

Seek #intFNum, offset

Input #intFNum, trame(j)
trame(j) = input(1,#intFNum)

j = j + 1

Next offset

Close intFNum



Pas testé, pas garantie, mais ce que t'as dit Loup Gris tout à l'heure.



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Diable, collision de réponses




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
plus simple:

Dim trame As String

trame = space$(4)
Open File1.Path & "" & File1.FileName For Binary Access Read As #intFNum
Get #intFNum, 19, trame
Close intFNum

Daniel
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Précision, si tu déclares un tableau en trame(4) ... les index seront de 0 à 3.

Loup Gris
Messages postés
10
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 avril 2005

Merci Loups et Gobi vous m'ôtez une grosse echarde de la patte
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
même avec un tableau pas besoin de boucle:

Dim trame(3) As String *1

Open File1.Path & "" & File1.FileName For Binary Access Read As #intFNum
Get #intFNum, 19, trame
Close intFNum

msgbox asc(trame(3))

Daniel
Messages postés
58
Date d'inscription
jeudi 30 décembre 2004
Statut
Membre
Dernière intervention
21 septembre 2007

Oué


Hrusdik
I do what I want , where I want , when I want<