Extraire octets d'un fichier binaire de maniere optimisée

fatmaboule Messages postés 9 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 13 mars 2018 - 5 sept. 2005 à 12:13
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 5 sept. 2005 à 14:23
salut

voici mon probleme:

je souhaite extraire les octets d'un fichier binaire.

Le volume de ces fichiers est acceptable (jusqu'a 10 Mo)

le but etant de rechercher des chaines HEXA qui une fois trouvées seront remplacées par d'autres OCTETS.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

pour le moment mon programme lit les Octets avec get dans un tableau dimmensionné a la taille du fichier (1 variable: Octet(taille du fichier))

1er Inconvenient: c'est tres tres lent !!!!! (environ 10 secondes pour 1 Mo!!!)

il me faudrait une methode beaucoup plus rapide !!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

la methode de recherche:

pour le moment je fais une recherche octet par octet cad. je compare le premier octet de ma chaine a recherche avec le les octets contenus dans mon tableau ( octets(100000) grace a une boucle. si le 1er octet est identique je compare le 2eme octet et ainsi de suite . Si la chaine est trouvé c'est gagné.

Le probleme: j'ai 16 chaines d'octets ( chaque chaine a entre 8 et 32 octets) a rechercher.
la encore la recherche glogale dure environs 30 secondes dans un fichier de 1 Mo.

Ce que je recherche, c'est une methode de mise en memoire et de recherche plus flexible et plus rapide que ma methode qui sauvegarde et recherche octet par octet. ( existerait t'il peut etre une fonction de recherche de "chaine d'octet" comme pour les strings ???)

voila voila

merci

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
5 sept. 2005 à 12:46
Tu a essayé en accès aléatoire?, tu accèdes aux données par bloc.






Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)

Une question se pose sur le forum, pas en privé


NH
0
fatmaboule Messages postés 9 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 13 mars 2018
5 sept. 2005 à 13:21
pour le moment j'ouvre le fichier de la maniere suivante:

Dim dnr As Byte 'ok
dnr = FreeFile
Open chemin & fichier For Binary As #dnr
ReDim octet(longueur)
For y = 1 To longueur
Get #dnr, y, octet(y)
Next

que va m'apporter l'acces aleatoire ???

n'est-il pas plus judicieux de charger l'ensemble du fichier en memoire ??

( ou alors j'ai pas compris ce que tu veux dire ! :-)

je ne comprends pas non plus ce que tu veux dire pas "Il est plus facile de batiser kk1 que de la convertir."

c'est ma 1ere question sur le forum !!! qu'est ce que j'ai mal fait pour que ce soit un message privé ????
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2005 à 13:25
On ne répètera jamais assez: PAS DE TRAITEMENTS LOURDS EN VB, ce n'est pas fait pour cela.
On écrit une dll en natif (C ou ASM) et on l'appelle depuis vb. Codée correctement, une dll devrait traiter au moins 5 Mo/s.

ciao...
BruNews, MVP VC++
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
5 sept. 2005 à 13:40
Salut,



Je pense à un truc similaire, c'est la coloration de fichier dans un éditeur de texte.

J'ai vu une appli Delphi le faire pour traiter un fichier texte pour que des "mots clés" sois coloré dans un contrôle rtf.

La techinque consite à utiliser des jetons (token), un tableau de
référence et faire une lecture séquencielle du fichier. C'est super
chaud à coder mais ça marchais super bien.



A ta place, je chercherais des infos sur "token", "tokenize", "tokenizer".



Chris

N'oubliez pas de cloturer votre post.
0

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

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 sept. 2005 à 14:22
Salut, si c'est pour charger tout le fichier d'un coup en mémoire, il existe la fonction input :

dim s as string
dim dnr as byte
dnr = FreeFile
Open chemin & fichier For inpur As #dnr
s= input(lof(dnr),#dnr)
close #dnr

Ensuite, tu analyses ta chaine 's' octet par octet. Question perf, je ne sais pas comment se comporte windows au niveau lecture disque mais je pense qu'à ce niveau ça doit être plus rapide qu'octet par octet.
Bien sùr, reste l'analyse de la chaine en mémoire et il faudra passer par des mid.
Y a-t-il gain sur un fichier de 10 Mo ? Pas sùr en VB. A tester.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 sept. 2005 à 14:23
Oups, tout le monde aura compris :
Open chemin & fichier For input As #dnr

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous