Lecture de caractères spéciaux

Résolu
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005 - 2 avril 2005 à 19:39
AZEazeazgfafaazea Messages postés 58 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 21 septembre 2007 - 3 avril 2005 à 23:13
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

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 avril 2005 à 20:02
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
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 avril 2005 à 20:57
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
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 avril 2005 à 20:10
un fichier ouvert en binaire ça se lit avec Get

Daniel
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 avril 2005 à 20:33
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.
0

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

Posez votre question
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005
2 avril 2005 à 20:33
Tu pourrais me donner la synthaxe pour Get stp? pcq avec unput ça marche très bien sauf ce caractère
0
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005
2 avril 2005 à 20:36
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)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 avril 2005 à 20:37
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
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 avril 2005 à 20:41
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 avril 2005 à 20:44
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.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 avril 2005 à 20:49
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
0
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005
2 avril 2005 à 20:51
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 (")
0
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005
2 avril 2005 à 20:54
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 avril 2005 à 20:57
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 avril 2005 à 20:58
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.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 avril 2005 à 20:58
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 avril 2005 à 20:59
Précision, si tu déclares un tableau en trame(4) ... les index seront de 0 à 3.

Loup Gris
0
Fabk01 Messages postés 10 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 2 avril 2005
2 avril 2005 à 21:03
Merci Loups et Gobi vous m'ôtez une grosse echarde de la patte
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 avril 2005 à 21:04
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
0
AZEazeazgfafaazea Messages postés 58 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 21 septembre 2007
3 avril 2005 à 23:13
Oué


Hrusdik
I do what I want , where I want , when I want<
0
Rejoignez-nous