kakenette
Messages postés218Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention15 novembre 2009
-
21 oct. 2008 à 20:57
kakenette
Messages postés218Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention15 novembre 2009
-
22 oct. 2008 à 22:09
Bonjour, voilà j'ai fait une petite fonction booléenne pour savoir si oui ou non un mot a été trouvé dans la source d'un fichier, je voulais savoir si il existe ou si vous connaissez une méthode plus rapide que celle que j'ai faite qui suit :
Peut être mon idée de tableau est pas bonne...
---
SearchStr = "Le mot"
---
Dim bContents() As Byte
ReDim bContents(LOF(oFile))
Get #oFile, , bContents
---
La partie de recherche que j'aimerai amélioré :
For i = 0 To UBound(bContents)
If bContents(i) = Asc(Left$(SearchStr, 1)) Then
Found = 0
For j = Len(SearchStr) - 1 To 1 Step -1
If bContents(i + j) <> Asc(Mid$(SearchStr, 1 + j, 1)) Then
Found = -1
Exit For
End If
Next
If Found = 0 Then
MSGBOX " TROUVER !"
End If
End If
Next
Ps: Si vous ne comprenez rien dite le moi j'essayerai de mieux m'expliquer lol.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 oct. 2008 à 23:15
salut,
à vérifier avec le fichier en question mais logiquement, "le mot" est alors entrecoupé de vbnullchar
dans quel cas on doit pouvoir accélérer la recherche avec (après la lecture vers le tableau de byte) :
dim s$
s=bContents
found = iif(instrb(1,s,strconv(SearchStr,vbunicode))=0,-1,0)
pas testé et juste tapé dans cette fenêtre, çà doit pas être bien loin de çà....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp <
kakenette
Messages postés218Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention15 novembre 20091 22 oct. 2008 à 14:31
hein ? j'ai pas compris se que tu veux me dire, tu veux que j'héberge quoi?
En réalité la fonction est asser simple, J'ouvre un fichier, je récupère la source binaire et je regarde si oui ou non un mot s'y trouve. Pour le moment j'ai pas trouver plus vite que ma boucle...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 oct. 2008 à 17:10
si c'est un fichier "normal" (ascii ou ansi), pourquoi tu l'ouvres en binaire?
c'est pourquoi je demandais un exemple de fichier
et dans ce cas :
Private Sub
Form_Load()
Dim FF As Integer, sBuffer As String
Const SearchStr As String = "Le mot"
FF = FreeFile
Open "C:\fichier.txt" For Input As #FF
sBuffer = Input(LOF(FF), 1)
Close #FF
If InStrB(1, sBuffer, SearchStr) > 0
Then MsgBox "TROUVé !"
End Sub
possible également de lire ligne par ligne pour ne pas avoir à récupérer la totalité d'un bloc, la différence d'exécution ne s'en fera ressentir que sur de gros fichiers, à tester...
<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
kakenette
Messages postés218Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention15 novembre 20091 22 oct. 2008 à 17:21
En faite je scan la ressource d'une application. donc la source hexadécimal, et je regarde des mots clé dedans. ma solution fonctionne mais si le fichier fait + de 2Mo ça prend trop de temps. surtout que par ".exe" je regarde plusieurs mot donc je fait plusieurs fois la boucle.
kakenette
Messages postés218Date d'inscriptiondimanche 1 mai 2005StatutMembreDernière intervention15 novembre 20091 22 oct. 2008 à 22:09
Oh super! Merci ça va super vite :p Ah je te remercie finalement on est arriver et grâce a toi! La prochaine fois j'essayerai de te rendre la part même si sa serra a mon avis très dure :D A oui ça marche un peut comme un Instr() mais c un Instr Binaire :p Cool merci.