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
18
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
18
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
33
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
41
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
18
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
33
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
41
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
33
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
41
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
41
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
33
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
18
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
33
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