JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Rechercher une séquence dans une série de fichiers Lun 20 Avr 2015 - 21:18 | |
| Le problème est de rechercher une séquence de caractères dans tout ou partie des fichiers d'un répertoire, y compris éventuellement ses sous-répertoires. Klaus a déjà proposé une sub du même genre: https://panoramic.1fr1.net/t3006-recherche-d-une-chaine-de-caracteres-dans-une-arborescence?highlight=rechercher+une+cha%EEne mais qui, sauf erreur de ma part, ne s'applique qu'à des fichiers de type texte. Mon problème était de rechercher une séquence donnée Ascii (et pourquoi pas, binaire) dans tous les fichiers ou les fichiers d'un type donné, d'un répertoire et éventuellement de ses sous-répertoires. La liste des fichiers contenant la séquence est rendue dans le presse-papier. La sub de recherche fait appel justement à KGF.dll, pour sa fonction 'ReadBinaryFileToString", bien pratique pour faire des recherches dans un fichier de type quelconque. - Code:
-
DIM r$,s$ r$ = "C:\PROGRA~2\MOZILL~1": ' répertoire de recherche s$ = "C:\Telechar": ' séquence cherchée
HEIGHT 0,SCREEN_Y MEMO 9: FULL_SPACE 9
Recseq(r$,"*.*",1,s$): ' recherche dans le répertoire et ses sous-répertoires
CLIPBOARD_PASTE 9 item_add 9, "Terminé !" END ' ============================================================================== SUB Recseq(r$,typ$,sr%,seq$) ' Rechercher les fichiers de type typ$ d'un répertoire r$ donné et contenant une ' séquence seq$ donnée. ' Par exemple typ$ = "*.txt" ou typ$ = "*.*" (tous les fichiers) ' Si sr% = 1: y compris les sous-répertoires (= 0 sinon) ' Liste des fichiers trouvés rendue dans le clipboard (1 ligne par fichier) DIM_LOCAL pra$,scr$,arg$,q$,a$,rp$,buf$,rs%,me%,resul$,f$,i%,k% q$ = CHR$(34) IF RIGHT$(r$,1)<>CHR$(92) THEN r$ = r$ + CHR$(92) rp$ = r$ + typ$ arg$ = "/B": IF sr% = 1 THEN arg$ = arg$ + " /S": ' + les sous-répertoires arg$ = arg$ + " /A:-D" scr$ = "Z:\Vbscript.vbs" pra$ = "CreateObject(" + q$ + "Wscript.Shell" + q$ + ").Run " pra$ = pra$+q$+"CMD.exe /c DIR "+rp$+" "+arg$+" | clip"+q$+",0,True" FILE_OPEN_WRITE 9, scr$: FILE_WRITELN 9, pra$: FILE_CLOSE 9: ' script vbs EXECUTE_WAIT "WSCRIPT.exe " + scr$: ' Exécution du script FILE_DELETE scr$ me% = 9900: WHILE OBJECT_EXISTS(me%)=1: me%=me%+1: END_WHILE MEMO me%: HIDE me%: WIDTH me%,800: CLIPBOARD_PASTE me% IF LABEL("Nor_dll") = 0 THEN LABEL Nor_dll ON_ERROR_GOTO Nor_dll: ' si pas de dll chargée, dll_off -> erreur DLL_OFF: ' à tout hasard Nor_dll: OFF_ERROR_GOTO DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll": ' <==== Chemin de KGF.DLL ============ resul$ = "" FOR i% = 1 TO COUNT(me%) a$ = ITEM_READ$(me%,i%) f$ = a$: IF sr% <> 1 THEN f$ = r$ + a$ FILEBIN_OPEN_READ 9, f$ buf$ = STRING$(FILEBIN_SIZE(9)," ") FILEBIN_CLOSE 9 rs% = DLL_CALL2("ReadBinaryFileToString",ADR(f$),ADR(buf$)) k% = INSTR(buf$,s$) IF k% > 0 THEN resul$=resul$+f$+CHR$(13)+CHR$(10) NEXT i% DELETE me% IF resul$<>"" THEN resul$ = LEFT$(resul$,LEN(resul$)-2) CLIPBOARD_STRING_COPY resul$ END_SUB ' ============================================================================== On pourrait facilement, si nécessaire, affiner le résultat en renvoyant également le ou les emplacement(s) dans le fichier où la séquence a été trouvée.
Dernière édition par JL35 le Mar 21 Avr 2015 - 16:44, édité 1 fois | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Rechercher une séquence dans une série de fichiers Lun 20 Avr 2015 - 23:15 | |
| | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Rechercher une séquence dans une série de fichiers Mar 21 Avr 2015 - 16:43 | |
| Merci Klaus ! Je relis seulement maintenant, et je m'aperçois que le forum a encore fait des siennes Là où il y a (début de la sub): - Code:
-
IF RIGHT$(r$,1)<>"" THEN r$ = r$ + "" Il faut lire: - Code:
-
IF RIGHT$(r$,1)<>CHR$(92) THEN r$ = r$ + CHR$(92) ce satané forum a encore bouffé l'antislash ! Bon, je corrige ci-dessus, j'espère qu'il n'y en a pas d'autre, mais c'est bougrement agaçant ! | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Rechercher une séquence dans une série de fichiers Mar 21 Avr 2015 - 17:12 | |
| En tout cas, c'est un programme qui peut être très pratique quand on sait ce que l'on recherche. bien sûr quand on ne sait pas, ça ne peut pas faire de miracle. J'ai constaté aussi que je ne pouvais pas trouver le dahu avec (ni de jour, ni de nuit). bon aller, je sors... mais je voulais mettre un commentaire car ce joli programme n'avait pas eu les retours qu'il mérite. | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Rechercher une séquence dans une série de fichiers Mar 21 Avr 2015 - 22:06 | |
| Euh... effectivement, un programme de recherche qui déciderait tout seul ce qu'il doit chercher... Pour moi c'était un besoin ponctuel, je cherchais dans un répertoire donné (d'un programme particulier) les fichiers (y compris exécutables, fichiers de config, etc.) contenant la référence à un chemin donné. C'est très particulier comme usage, et je ne m'attendais pas à un enthousiasme général ( ), mais bon, je partage, on ne sait jamais. | |
|
Contenu sponsorisé
| Sujet: Re: Rechercher une séquence dans une série de fichiers | |
| |
|