Lecture d'un fichier hexa par hexa

Résolu
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006 - 23 juil. 2004 à 19:41
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 24 juil. 2004 à 12:19
bonjour a tous ceux qui lirons ce message et merci d'avance si vous trouvez une solution.

je voudrai lire un fichier exemple avec 30303030 dedans soit 1111 en ascII.

je voudrai lire les hexa du debut j'usqu'a la fin du fichier tout
en les mettant un par un dans une variable X pour les traiter.

mon prob est que ne c'est pas comment incrementer le debut de la lecture. (la fourchette de lecture d'un fichier)
voila ce que moi j'ai fai
cela fonctionne mais je ne ve pas ouvrir tous le fichier d'un coups
pour le mettre dans (a) je veux les LIRE un par un.

Open (FILE) For Binary As #1
LNG = FileLen(FILE)
a = Input(LNG, #1) "comment incrementer la lecture 1 par 1??
For I = 1 To LNG
X = hex(Mid(a, I + 1, 1))
"traitement divers sur X"
Next I

BYE:
close #1
merci encore a ceux qui pourrons m'aider (c'est pas super bien expliquer je sais lol) BYE

9 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 19
23 juil. 2004 à 20:22
Si tu ne veux pas charger tous le fichier en mémoire d'un coup, tu peux essqyer ça :

Dim a As String * 2
Dim X As String
Dim FILE As String
Dim LNG As Long
Dim i As Long

FILE = "c:\temp\essai.dat" ' le chemin et le nom de ton fic
LNG = FileLen(FILE)

Open (FILE) For Random As #1 Len = 2

For i = 1 To LNG / 2
Get #1, i, a
tu choisi
X = a ' là tu as la valeur hexa lue par ex '30'
ou
X = Chr(a) ' là tu as le caractère représenté par la valeur lue
Next i

Cordialement

CanisLupus
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juil. 2004 à 19:58
Salut bobo91
Tu étais bien parti, mais tu t'es compliqué : Lis d'une traite le fichier et fais ton traitement sur le String que tu vas récupérer.
Je suppose que les codes hexa que tu récupères sont tous par couple (de 00 à FF) :
Open (FILE) For Binary As #1
LNG = FileLen(FILE)
Texte = String(LNG, " ")
Get #1, , Texte
Close #1
For I = 1 to LNG Step 2
Chiffre = Chr(Val("&H" & Mid(Texte, I, 2)))
Next I


Vala
Jack
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
23 juil. 2004 à 20:01
je voulais juste siggnaler que le code de Jack ne s'applique que pour de ptits fichiers.....

en effet, pour des fichiers plus important, il est difficile de tout placer en mémoire (vive le Streaming)

voila, c'est tout ;)

(va falloir que je m'habitues a la nouvelle photo de Jack !!)
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
23 juil. 2004 à 21:16
merci a tous oui en effet c pour de gros fichier donc en memoire dans une variable c fait beaucoup donc je vai rester sur la solution a canislupus et je garde com mem les autre dans ma tete. merci infiniment a tous.bye
0

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

Posez votre question
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
24 juil. 2004 à 00:18
ta solution est bonne sauf qu'il y a un petit hic:
j'ai fait un fichier text comportant 123456
et il me sort : 12;34;56
moi je voudrais qu'il me sorte 1;2;3;4;5;6
merci encore une petite modif a faire mais je ne sais pas ou
et je ne comprend pas le "Dim a As String * 2" ke ve dire le *2
merci beaucoup.
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
24 juil. 2004 à 00:29
c'est bon j'ai trouver la solution voici le code exact que je voulai :

Dim a As String * 1
Dim FILE As String

FILE = "g:\BOBO.txt"
LNG = FileLen(FILE)

Open (FILE) For Random As #1 Len = 1
For i = 1 To LNG
Get #1, i, a
X = a
Debug.Print X
Next i

(je voudrai juste une explication sur le Dim a As String * 1 prk (*1)????

merci merci merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 juil. 2004 à 01:05
ce 1 est la taille de ta chaine de caractères.......

ca permet de reserver une taille fixe...
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
24 juil. 2004 à 01:07
lu merci beaucoups
et pour faire de l'hexa j'ai fais hex(asc(a))
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 19
24 juil. 2004 à 12:19
Tout à fait,
Scuse pour l'erreur ds le code mais je pensais d'après ta question de départ que ton fichier était en hexa.
Mais tu t'en es très bien sorti tout seul.

Pourquoi le string * 1 ? Ben, tout simplement parce que cette méthode d'ouverture et de lecture de fichier impose ça. Sinon, ça marche pas.
Le get lit autant de caractères que peut contenir la taille du buffer (a ds l'ex).

Cordialement

CanisLupus
0