#include #include #include #include ; Required for _ArrayDisplay. #include #include #include #include #include main() Func main() HotKeySet("{F4}", "Stop") Global $stop $hauteur = 690 GUICreate("Chercher",400,$hauteur) ;*************************************************************************************************** GUICtrlCreateGroup("Chaînes à rechercher", 10, 5, 375, 140) ;***************************************************** $hauteurRech = 30 $gaucheRech = 30 $aideSearch = GUICtrlCreateButton("Aide",325, $hauteurRech-10, 50,20) GUICtrlCreateLabel("Via fichier", $gaucheRech, $hauteurRech+10) $file_chosen = GUICtrlCreateRadio("", $gaucheRech, $hauteurRech+30,15,20) $StringSearchFile = GUICtrlCreateInput("",$gaucheRech+20,$hauteurRech+30,200,20) $SearchFile = GUICtrlCreateButton("Choisir",$gaucheRech+230,$hauteurRech+30,50,20) ;**************************************************** GUICtrlCreateLabel("Via input (séparées par virgule)", $gaucheRech, $hauteurRech+55) $inline_chosen = GUICtrlCreateRadio("", $gaucheRech, $hauteurRech+75,15,20) $StringSearchString = GUICtrlCreateInput("",$gaucheRech+20,$hauteurRech+75,200,20) GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group ;**************************************************************************************** $hauteurFiltres = $hauteurRech+125 $gaucheFiltres = 30 GUICtrlCreateGroup("Filtres sur fichier", 10, $hauteurFiltres, 375, 110) $aideFiltres = GUICtrlCreateButton("Aide",325, $hauteurFiltres+15, 50,20) GUICtrlCreateLabel("Deux filtres de fichiers disponibles sous la forme Include[|Exclude]", $gaucheFiltres, $hauteurFiltres+45) GUICtrlCreateLabel("Filtre : ", $gaucheFiltres, $hauteurFiltres+77) $filtre = GUICtrlCreateInput("", $gaucheFiltres+32, $hauteurFiltres+75,150,20) GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group ;**************************************************************************************** $hauteurDossier = $hauteurFiltres+120 $gaucheDossier = 30 GUICtrlCreateGroup("Dossier de recherche", 10, $hauteurDossier, 375, 90) GUICtrlCreateLabel("Récursif : ", $gaucheDossier, $hauteurDossier+25) $radio_rec_oui = GUICtrlCreateRadio("oui", $gaucheDossier+55, $hauteurDossier+20) $radio_rec_non = GUICtrlCreateRadio("non", $gaucheDossier+95, $hauteurDossier+20) $dossier = GUICtrlCreateInput("", $gaucheDossier, $hauteurDossier+50,200,20) $SearchFolder = GUICtrlCreateButton("Choisir",$gaucheDossier+210,$hauteurDossier+50,50,20) GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group GUICtrlCreateLabel("Console", 10, $hauteurDossier+100) Local $idEdit = GUICtrlCreateEdit("", 10, $hauteur-300, 380, 250, $WS_VSCROLL + $ES_READONLY) Local $stopalert = GuiCtrlCreateLabel("", 100,$hauteur-25,200,20) Local $start = GuiCtrlCreateButton("Chercher", 325,$hauteur-35,60,30) GUICtrlSetColor($stopalert, $COLOR_RED) GUICtrlSetState($file_chosen, $GUI_CHECKED) GUICtrlSetState($radio_rec_oui, $GUI_CHECKED) GUISetState(@SW_SHOW) while 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $SearchFile Local $sFileOpenDialog = FileOpenDialog("Selectionner le fichier de recherche", @scriptdir & "\", "Text files (*.txt)", $FD_FILEMUSTEXIST) if @error Then MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.") FileChangeDir(@ScriptDir) Else FileChangeDir(@ScriptDir) GuiCtrlSetData($StringSearchFile, $sFileOpenDialog) Endif Case $SearchFolder Local $sFileSelectFolder = FileSelectFolder("Choisir le dossier de recherche", "") If @error Then ; Display the error message. MsgBox($MB_SYSTEMMODAL, "", "No folder was selected.") Else GuiCtrlSetData($dossier, $sFileSelectFolder) EndIf Case $start If BitAND(GUICtrlRead($file_chosen), $GUI_CHECKED) = $GUI_CHECKED then $search = GUICtrlRead($StringSearchFile) $isdossier = 1 endif If BitAND(GUICtrlRead($inline_chosen), $GUI_CHECKED) = $GUI_CHECKED then $search = GUICtrlRead($StringSearchString) $isdossier = 0 endif If BitAND(GUICtrlRead($radio_rec_oui), $GUI_CHECKED) = $GUI_CHECKED then $rec = 1 If BitAND(GUICtrlRead($radio_rec_non), $GUI_CHECKED) = $GUI_CHECKED then $rec = 0 if($search = "") then Msgbox(0,"Erreur","Chaine de recherche vide") continueloop endif if(GUICtrlRead($dossier) = "") then Msgbox(0,"Erreur","Dossier de recherche vide") continueloop endif if(GUICtrlRead($filtre) = "") then Msgbox(0,"Erreur","Filtre de recherche vide") continueloop endif GuiCtrlSetData($stopalert, "Appuyez sur F4 pour interrompre") GUICtrlSetState($start, $GUI_DISABLE) search($search, $isdossier, $rec,GUICtrlRead($dossier),GUICtrlRead($filtre), $idEdit) GUICtrlSetState($start, $GUI_ENABLE) GuiCtrlSetData($stopalert, "") Case $aideFiltres createGuiAide() Case $aideSearch createGuiSearch() EndSwitch wend GUIDelete() EndFunc func search($search, $isdossier, $rec, $dossier, $filtre, $idEdit) Global $stop $stop = False GuiCtrlSetData($idEdit, "") GuiCtrlSetData($idEdit, "Lancement de la recherche"&@CRLF) ;si fichier, on ouvre et on split la chaine if($isdossier) then Local $hFileOpen = FileOpen($search, $FO_READ) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file.") Return False EndIf $search = FileRead($hFileOpen) FileClose($hFileOpen) Endif Local $array_table = StringSplit($search,",",2) Local $table_non_uti = $array_table GuiCtrlSetData($idEdit, Ubound($array_table)&" chaines sont à rechercher"&@CRLF&GUICtrlRead($idEdit)) Local $save = GUICtrlRead($idEdit) For $i = 3 To 1 step -1 GuiCtrlSetData($idEdit, "Démarrage dans "&$i&@CRLF&$save) $point = "" For $j = 1 To 4 $point &= "." GuiCtrlSetData($idEdit, "Démarrage dans "&$i&$point&@CRLF&$save) sleep(250) Next Next Local $sFldr1 = @scriptdir&"\ouput_"&@YEAR&"_"&@MON&"_"&@MDAY&"_"&@HOUR&@MIN&@SEC DirCreate($sFldr1) ;Ouverture du fichier pour ecriture des details Local $hFileOpen2 = FileOpen($sFldr1&"\details.txt", $FO_OVERWRITE) If $hFileOpen2 = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file.") Return False EndIf ;Ouverture du fichier pour ecriture des utilises Local $hFileOpen3 = FileOpen($sFldr1&"\trouve.txt", $FO_READ + $FO_OVERWRITE) If $hFileOpen3 = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file.") Return False EndIf ;Ouverture du fichier pour ecriture des non_utilises Local $hFileOpen4 = FileOpen($sFldr1&"\non_trouve.txt", $FO_OVERWRITE) If $hFileOpen4 = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file.") Return False EndIf ;array des documents Local $aFileList = _FileListToArrayRec ($dossier, $filtre, 1,$rec) Local $iRows = UBound($aFileList, $UBOUND_ROWS) Local $iRowsTable = UBound($array_table, $UBOUND_ROWS) For $i = 1 To $iRows-1 ;parcour des fichiers GuiCtrlSetData($idEdit, "("&$i&"/"&$iRows-1&") "&$aFileList[$i]&@CRLF&GUICtrlRead($idEdit)) $hFileOpen = FileOpen($dossier&"\"&$aFileList[$i], $FO_READ) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred when reading the file "&$dossier&"\"&$aFileList[$i]) Return False EndIf Local $sFileRead = FileRead($hFileOpen) $ecriture_fichier = 0 For $j = 0 To $iRowsTable - 1 if($stop) then GuiCtrlSetData($idEdit, "Traitement arrêté"&@CRLF&GUICtrlRead($idEdit)) return 0 endif ;parcour des chaines if(StringInStr($sFileRead, $array_table[$j]) <> 0) then ;si yen a une qui est trouvée ;on écrit le fichier source si pas déjà fait if(not $ecriture_fichier) then FileWrite($hFileOpen2, $aFileList[$i] & @CRLF) $ecriture_fichier=1 endif ;on enleve de l'array la chaine Local $iIndex = _ArraySearch($table_non_uti, $array_table[$j]) if(@error == 0) then _ArrayDelete($table_non_uti, $iIndex) endif FileWrite($hFileOpen2, Chr(9)&$array_table[$j] & @CRLF) ;on l'écrit dans le fichier txt si elle n'existe pas déjà FileSetPos($hFileOpen3, 0, $FILE_BEGIN) Local $sFileRead3 = FileRead($hFileOpen3) if(StringInStr($sFileRead3, $array_table[$j]) == 0) then FileSetPos($hFileOpen3, 0, $FILE_END) FileWrite($hFileOpen3, $array_table[$j] & @CRLF) FileFlush($hFileOpen3) endif endif if(stringlen(GUICtrlRead($idEdit))>5000) then GuiCtrlSetData($idEdit,"...") endif Next $iRowsTable = UBound($array_table, $UBOUND_ROWS) ; Close the handle returned by FileOpen. FileClose($hFileOpen) Next For $j = 0 To UBound($table_non_uti, $UBOUND_ROWS) - 1 FileWrite($hFileOpen4, $table_non_uti[$j] & @CRLF) Next FileClose($hFileOpen2) FileClose($hFileOpen3) FileClose($hFileOpen4) GuiCtrlSetData($idEdit, "Fin du Traitement, fichier d'ouput créés avec succès."&@CRLF&GUICtrlRead($idEdit)) endfunc func createGuiAide() GUICreate("Aide filtres",400,150) GUICtrlCreateLabel('Rechercher dans tous les fichiers : *', 5, 10) GUICtrlCreateLabel('Rechercher dans tous les fichiers sauf fichier jar : *|*.jar', 5, 30) GUICtrlCreateLabel('Rechercher dans tous les fichiers sql sauf fichier commencant par log : *.sql|log*', 5, 50) GUICtrlCreateLabel('Rechercher dans tous les fichiers sql et com : *.sql;*.com', 5, 70) $quitter = GUICtrlCreateButton("J'ai compris",5, 120, 100,20) GUISetState(@SW_SHOW) while 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $quitter ExitLoop EndSwitch wend GUIDelete() endfunc func createGuiSearch() GUICreate("Aide Search",400,150) GUICtrlCreateLabel('Les chaînes à rechercher doivent être sous la forme chaine1,chaine2,chaine3...', 5, 10) GUICtrlCreateLabel('Pas de regex disponible.', 5, 30) GUICtrlCreateLabel('Les chaînes à rechercher peuvent être dans un fichier sous le même format', 5, 50) GUICtrlCreateLabel('et sur une seule ligne.', 5, 70) $quitter = GUICtrlCreateButton("J'ai compris",5, 120, 100,20) GUISetState(@SW_SHOW) while 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $quitter ExitLoop EndSwitch wend GUIDelete() endfunc func Stop() Global $stop $stop = True endfunc