Page 1 sur 1
[R] Rechercher la présence d'un mot dans un fichier
Posté : dim. 04 oct. 2015 10:44
par Amesamana
Bonjour
Alors voilà ma recherche.
Je voudrais pouvoir coller dans une GUI un texte et retrouver dans un autre fichier si des lignes sont présentes.
Par exemple sur ma GUI je colle ces lignes :
Sur C: j'ai un fichier qui contient des lignes
par exemple cette ligne(qui est également présente dans le GUI)
C:\Program Files (x86)\Avira\AntiVir Desktop\avgnt.exe
Je voudrais changé de couleur la ligne (une fois la recherche lancé) si elle est présente dans mon fichier source.
Ne sachant pas trop comment commencer un petit coup de pouce serait le bienvenue
Merci.
Re: [..] Rechercher la présence d'un mot dans un fichier
Posté : dim. 04 oct. 2015 23:27
par mikell
Tout ça est assez simple si tu prends le temps de faire les choses dans l'ordre...
Où est-ce que tu bloques exactement ?
Re: [..] Rechercher la présence d'un mot dans un fichier
Posté : dim. 04 oct. 2015 23:37
par mdanielm
J'utiliserais un contrôle _GUICtrlRichEdit qui permet de colorer une ligne sélectionnée, car la difficulté c'est bien la coloration et pas la recherche!
_SetSel pour sélectionner
_SetCharColor pour colorer
_GetTextInLine pour obtenir les lignes une à une dans le contrôle
Pour la recherche, je chargerais le fichier dans une chaîne $content, et pour chaque ligne $li du contrôle je ferais:
$content = StringReplace($content, $li, $li)
car @extended contient alors le nombre de remplacements.
Si ce nombre est >0, la ligne $li est dans le fichier, il faut la colorer.
Ce n'est qu'une idée!
Bon travail
Re: [..] Rechercher la présence d'un mot dans un fichier
Posté : jeu. 22 oct. 2015 17:35
par Amesamana
Bonjour,
désolé réponse tardive, mais je ne m'étais pas remis sur ce code depuis un bon moment
Merci pour vos réponses.
Alors pour la recherche ça fonctionne, pas comme je le voudrais mais j'ai bien un résultat.
Je voudrais que le rapport reste entier et que les lignes trouvées soit d'une couleur.
J'aimerais mettre aussi des couleurs par rapport à des catégories de recherche.
Par exemple j’insère ces lignes et je recherche sppcomapi.dll et Rasl2tp.sys
[MD5.A56400B83371EAD36B9E62FAF0546595] - (.Microsoft Corporation - Extensions Internet pour Win32.) (.24/07/2014 - 13:10:54.) -- C:\Windows\System32\wininet.dll [2240000]
[MD5.471815800AE33E6F1C32FB1B97C490CA] - (.Microsoft Corporation - RAS L2TP mini-port/call-manager driver.) (.21/11/2010 - 04:24:33.) -- C:\Windows\system32\Drivers\Rasl2tp.sys [129536]
[MD5.88AB9B72B4BF3963A0DE0820B4B0B06C] - (.Microsoft Corporation - Application d’ouverture de session Windows.) (.04/03/2014 - 10:43:50.) -- C:\Windows\System32\Winlogon.exe [455168]
[MD5.067FA52BFB59A56110A12312EF9AF243] - (.Microsoft Corporation - Bibliothèque de licences.) (.21/11/2010 - 04:24:16.) -- C:\Windows\System32\sppcomapi.dll [232448]
Je voudrais le faire apparaitre comme ceci
[MD5.A56400B83371EAD36B9E62FAF0546595] - (.Microsoft Corporation - Extensions Internet pour Win32.) (.24/07/2014 - 13:10:54.) -- C:\Windows\System32\wininet.dll [2240000]
[MD5.471815800AE33E6F1C32FB1B97C490CA] - (.Microsoft Corporation - RAS L2TP mini-port/call-manager driver.) (.21/11/2010 - 04:24:33.) -- C:\Windows\system32\Drivers\Rasl2tp.sys [129536]
[MD5.88AB9B72B4BF3963A0DE0820B4B0B06C] - (.Microsoft Corporation - Application d’ouverture de session Windows.) (.04/03/2014 - 10:43:50.) -- C:\Windows\System32\Winlogon.exe [455168]
[MD5.067FA52BFB59A56110A12312EF9AF243] - (.Microsoft Corporation - Bibliothèque de licences.) (.21/11/2010 - 04:24:16.) -- C:\Windows\System32\sppcomapi.dll [232448]
et non comme j'arrive à le faire pour le moment.
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIFiles.au3>
Global Const $sFilePath = _WinAPI_GetTempFileName(@TempDir); fichier à traiter %temp%
Global Const $sFilePathResult = _WinAPI_GetTempFileName(@TempDir); fichier pour recuperer %temp%
Global $RechMot[3]=["sppcomapi.dll", "Rasl2tp.sys"] ; On demarre un tableau, reste à compléter combien de mot possible ?
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Edit1 = GUICtrlCreateEdit("", 48, 32, 513, 329)
GUICtrlSetData(-1, "")
Global $Button1 = GUICtrlCreateButton("Button1", 232, 384, 137, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
FileDelete($sFilePath) ; on supprime le fichier dans %temp% a la fermeture de la gui
FileDelete($sFilePathResult)
Exit
Case $Button1
Local $FileReadEd = GUICtrlRead($Edit1) ; On lit Edit
FileWrite($sFilePath, $FileReadEd) ; inscrit dans le fichier temporaire
; On commence la recherche
Local $X
For $X in $RechMot
Local $Resultat = $X &@CRLF ; le resultat
Local $Trouve = False ; le switch qui indiquera si on trouve
Local $Fichier = FileOpen($sFilePath, 0) ; on ouvre le fichier
If $Fichier = -1 Then ; On verifie que le fichier est ouvert
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier")
Exit
EndIf
While 1 ; Et on parcoure le fichier...
$ligne = FileReadLine($Fichier) ; ... en lisant chaque ligne...
If @error = -1 Then ; ... jusqu'a la fin...
ExitLoop
Else
If StringInStr($ligne,$X,2) <> 0 Then ; Si on trouve la chaine a chercher dans la ligne
$Resultat = $Resultat & $ligne & @CRLF ; ... on l'inscrit dans les resultats ...
$Trouve = True ;... et on precise qu'on a trouve
EndIf
EndIf
Wend
FileClose($sFilePath) ; on ferme le fichier
if $Trouve = True Then; Si on trouve...
GUICtrlSetData($Edit1, ""); on vide la zone d'édition
FileOpen($sFilePathResult, 0) ; ouvre le fichier
FileWrite($sFilePathResult, $Resultat); on ecrit dans le fichier
Local $SERV = FileRead($sFilePathResult); on lit
GUICtrlSetData($Edit1, $SERV) ; inscription dans Edit
FileClose($sFilePathResult); on ferme le fichier
EndIf
Next
EndSwitch
WEnd
Question supplémentaires.
Je suis limité en nombre de ligne dans mon Edit ?
Est-ce que je suis limité en nombre de mot à chercher ?
Autre question : Par exemple je recherche le mot
Supdate, comment éviter de retrouver avec des lignes qui ont Window
sUpdate
Je regarde et travaille sur _GUICtrlRichEdit
merci

Re: [..] Rechercher la présence d'un mot dans un fichier
Posté : sam. 07 nov. 2015 19:49
par Amesamana
Bonsoir,
Je reviens sur ce sujet !
Je me penche à nouveau dessus mais pas de résultat !
Mikell a écrit :Tout ça est assez simple si tu prends le temps de faire les choses dans l'ordre...
Où est-ce que tu bloques exactement ?
Pas dans la recherche, mais pouvoir mettre les lignes du fichier de recherche avec en couleur.
Surement pas si difficile mais je bloque, voir je ne trouve pas la solution.
Re: [..] Rechercher la présence d'un mot dans un fichier
Posté : lun. 09 nov. 2015 07:36
par mdanielm
En espérant cette fois que mon aide vous comble.
(2 modifications faites ce lundi à 8h)
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiRichEdit.au3>
Global $txt = Texte()
Global $hGui = GUICreate("Colorer des lignes",300,500,0,0)
Global $hRE = _GUICtrlRichEdit_Create($hGui,$txt,0,0,280,480)
GUISetState(@SW_SHOW)
Global $line,$len, $p, $arr, $mot, $yest
$mot = InputBox("Recherche d'un mot dans le texte","Tapez un mot (vide pour sortir): ")
while $mot <> "" and @error <> 1 ;bouton Cancel
_GUICtrlRichEdit_SetText($hRE, $txt)
$yest=false
for $n=1 to _GUICtrlRichEdit_GetLineCount($hRE)
$line = _GUICtrlRichEdit_GetTextInLine($hRE, $n)
$len = StringLen($line)
$p = _GUICtrlRichEdit_GetFirstCharPosOnLine($hRE, $n)
$arr = _GUICtrlRichEdit_FindTextInRange($hRE, $mot, $p, $p+$len, True, True) ;Sensible à la casse/mot entier
if $arr[0]>=0 then
_GUICtrlRichEdit_SetSel($hRE, $p, $p+$len)
_GUICtrlRichEdit_SetCharColor($hRE, 0x0000FF) ;BVR
$yest = true
endif
Next
if $yest Then
_GUICtrlRichEdit_Deselect($hRE) ; ote la sélection de la dernière ligne sélectionnée
Else
msgbox(0,"","Ce mot n'est pas dans le texte")
EndIf
$mot = InputBox("Recherche d'un mot dans le texte","Tapez un mot: ")
wend
while GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd
_GUICtrlRichEdit_Destroy($hRE)
GUIDelete($hGui)
func Texte()
return _
"Maître Corbeau sur un chêne mastard" & @crlf & _
"Tenait un fromton dans l’ clapoir" & @crlf & _
"Maître Renard reniflait qu’au balcon" & @crlf & _
"Quelque sombre zonard débouchait les flacons" & @crlf & _
"Il dit : Salut Corbac, c’est vous que je cherchais" & @crlf & _
"Pour vous dir’ que sans vous fair’ mousser le bréchet" & @crlf & _
"A côté du costard que vous portez mon cher" & @crlf & _
"La robe du soir du Paon est une serpillière" & @crlf & _
"" & @crlf & _
"Quand vous chantez il paraîtrait sans charre" & @crlf & _
"Que les merles en ont des cauch’mards" & @crlf & _
"Lors à ces mots plus fier que sa crémièr’" & @crlf & _
"Le corbeau ouvrit grand son piège à vers de terre" & @crlf & _
"Pour montrer qu’il pouvait chanter Rigoletto" & @crlf & _
"Cette grain’ de patat’ lâcha son calendo" & @crlf & _
"Le renard l’engloutit en disant c’est navrant" & @crlf & _
"Il est pas fait à cœur je l’ préfèr’ plus coulant" & @crlf & _
"" & @crlf & _
"Pauvre corbeau" & @crlf & _
"Tu t’es bien fait avoir" & @crlf & _
"Mais quelle idée de becqueter sur un chêne" & @crlf & _
"Et vu qu’ tu chant’s comm’ la rein’ des passoir’s" & @crlf & _
"C’est bien coton d’en vouloir au renard" & @crlf & _
"On est forcés de r’connaîtr’ en tout cas" & @crlf & _
"Que cett’ histoir’ de Monsieur d’ la Fontaine" & @crlf & _
"Rendit prudents les chanteurs d’opéra" & @crlf & _
"Et c’est depuis qu’ils chantent la bouch’ pleine"
EndFunc
Re: [R] Rechercher la présence d'un mot dans un fichier
Posté : mer. 11 nov. 2015 13:14
par Amesamana
Bonjour,
Oui merci beaucoup
Je vais pouvoir adapter ceci à mon code, avec votre aide je comprends ce qui cloche (je vais travailler dessus).
La version de la fable est sympa
[R]
Re: [R] Rechercher la présence d'un mot dans un fichier
Posté : mer. 11 nov. 2015 15:19
par orax
Le [R] doit se mettre dans le 1er message (je l'ai mis) puisque c'est le sujet 1er message qui est visible dans la liste.
Re: [R] Rechercher la présence d'un mot dans un fichier
Posté : dim. 24 avr. 2016 14:45
par Amesamana
Je m'aperçois que je n'avais jamais fait de retour sur ce sujet.
Merci
mdanielm
Alors pour recherche ça avait donné :
Le texte à copier (Ctrl+V) dans la GUI et un fichier Mot.txt sous C:\ pour la recherche.
► Afficher le texteLe code
Code : Tout sélectionner
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
$RechTxt = @HomeDrive & "\Mot.txt"
$hGUI = GUICreate("Recherche de mot", 405, 293, 302, 218)
$hRichEdit = _GUICtrlRichEdit_Create($hGUI, "", 0, 0, 401, 257, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_SetLimitOnText($hRichEdit, 1000000)
$bt_Recherche= GUICtrlCreateButton("Analyse", 160, 264, 75, 25)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $bt_Recherche
Local $Fichier
Local $BEGIN = TimerInit()
_GUICtrlRichEdit_SetBkColor($hRichEdit, 0x666666)
FileOpen($RechTxt, 0) ; on ouvre le fichier
If $Fichier = -1 Then ; Vérification que le fichier est correctement ouvert
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier")
EndIf
For $i = 1 To 9160
$mot = FileReadLine($RechTxt, $i)
If @error = -1 Then ; on lit le fichier jusqu'à la fin
ExitLoop
Else
If $mot Then
$yest = False
For $n = 1 To _GUICtrlRichEdit_GetLineCount($hRichEdit) ; on récupère les lignes de la GUI
$line = _GUICtrlRichEdit_GetTextInLine($hRichEdit, $n) ;On controle le texte
$len = StringLen($line) ; Rend le nombre
$p = _GUICtrlRichEdit_GetFirstCharPosOnLine($hRichEdit, $n) ; Récupére la position des mot cherché
$arr = _GUICtrlRichEdit_FindTextInRange($hRichEdit, $mot, $p, $p + $len, True, True) ;Recherche dans le texte la position ;Sensible à la casse/mot entier
If $arr[0] >= 0 Then
_GUICtrlRichEdit_SetSel($hRichEdit, $p, $p + $len) ; donne la position
_GUICtrlRichEdit_SetCharColor($hRichEdit, 0xFFFF00) ; met en couleur les positions trouvées
$yest = True
EndIf
Next
EndIf
EndIf
Next
If $yest Then
_GUICtrlRichEdit_Deselect($hRichEdit) ; ote la sélection de la dernière ligne sélectionnée
Else
MsgBox(0, "", "Aucun résultat trouvée", 3)
EndIf
FileClose($RechTxt)
EndSwitch
WEnd
► Afficher le texteLe texte
Code : Tout sélectionner
Le Coq et le Renard
Sur la branche d'un arbre était en sentinelle
Un vieux Coq adroit et matois.
"Frère, dit un Renard, adoucissant sa voix,
Nous ne sommes plus en querelle :
Paix générale cette fois.
Je viens te l'annoncer ; descends, que je t'embrasse.
Ne me retarde point, de grâce ;
Je dois faire aujourd'hui vingt postes sans manquer.
Les tiens et toi pouvez vaquer
Sans nulle crainte à vos affaires ;
Nous vous y servirons en frères.
Faites-en les feux dès ce soir.
Et cependant viens recevoir
Le baiser d'amour fraternelle.
- Ami, reprit le coq, je ne pouvais jamais
Apprendre une plus douce et meilleur nouvelle
Que celle
De cette paix ;
Et ce m'est une double joie
De la tenir de toi. Je vois deux Lévriers,
Qui, je m'assure, sont courriers
Que pour ce sujet on envoie.
Ils vont vite, et seront dans un moment à nous.
Je descends ; nous pourrons nous entre-baiser tous.
-Adieu, dit le Renard, ma traite est longue à faire :
Nous nous réjouirons du succès de l'affaire
Une autre fois. Le galand aussitôt
Tire ses grègues, gagne au haut,
mal content de son stratagème ;
Et notre vieux Coq en soi-même
Se mit à rire de sa peur ;
Car c'est double plaisir de tromper le trompeur.
► Afficher le texteLes mots recherchés