#NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=DicoDefinition.ico #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs ----------------------------------------------------------------------------------------------- Test de Dico Définition Script AutoIt Version 3.3.8.0 Auteur : Ahbadiane 17 Janvier 2012 #ce ----------------------------------------------------------------------------------------------- AutoItSetOption("MustDeclareVars", 1) #include "_DicoDefinition.au3" #include #include Global $sTemp, $sMot, $bDebugTrace, $bDebugPage, $sMsg, $aRetour, $iNB, $iNbOK, $iNbKO, $iMaxDef, $sMotStart, $sDicoStrategie Global $sFileTXT, $hFileTXT, $sFileXML, $hFileXML, $sXMLTemp, $sLog, $bXMLLigneParDef Global $hForm = GUICreate("Dictionnaire - Recherche des définitions", 740, 600) GUISetFont(8, 400, 0, "Verdana") Global $GraphicBloque = GUICtrlCreateGraphic(0, 0, 740, 600) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlSetState(-1, $GUI_HIDE) GUICtrlCreateGroup("Stratégie de recherche", 8, 0, 500, 93) GUICtrlCreateLabel("Définissez quel(s) dictionnaire(s) utilisé(s)." & @CRLF & _ "Le choix Multi permet de définir un enchainement de dictionnaire défini par sa lettre (D, L, T, X)" & @CRLF & _ "Le / placé en fin oblige à revenir sur certains dictionnaires si le mot a été transformé par un précédent dictionnaire.", 16, 16, 280, 72) GUICtrlSetColor(-1, 0x979999) Global $RadioDico1 = GUICtrlCreateRadio("(D) Dictionnaire.Net", 304, 8, 200, 17) Global $RadioDico2 = GUICtrlCreateRadio("(L) Larousse.fr", 304, 24, 200, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $RadioDico3 = GUICtrlCreateRadio("(T) Dictionnaire.TV5.org", 304, 40, 200, 17) Global $RadioDico4 = GUICtrlCreateRadio("(X) Dictionnaire.eXionnaire.com", 304, 56, 200, 17) Global $RadioDico5 = GUICtrlCreateRadio("Multi", 304, 72, 48, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global $InputMulti = GUICtrlCreateInput("LDTX/LDT", 354, 70, 74, 19) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateGroup("Mode debug", 510, 0, 220, 93) Global $CheckboxDebugPage = GUICtrlCreateCheckbox("Enregistrer les pages lues", 518, 20, 205, 34) GUICtrlSetTip(-1, "Création d'un sous-dossier Debug et à l'intérieur des dossiers pour la première lettre de chaque mot" & @CRLF & "Enregistrement d'un fichier HTML et TXT pour chaque définition" & @CRLF & "Création d'un fichier (Trace-Erreur.txt) pour les erreurs de connexion (s'il y a)") Global $CheckboxDebugTrace = GUICtrlCreateCheckbox("Créer deux fichiers de suivis", 518, 48, 205, 34) GUICtrlSetTip(-1, "Un fichier (Trace-OK.txt) pour les définitions trouvées" & @CRLF & "Un fichier (Trace-KO.txt) pour les mots non trouvés, s'il y a !") GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlSetState(-1, $GUI_HIDE) GUICtrlCreateGroup("", -99, -99, 1, 1) Global $TabMode = GUICtrlCreateTab(8, 94, 725, 500) ; Onglet "Rechercher un mot" Global $TabSheet1 = GUICtrlCreateTabItem(" Rechercher la définition d'un mot ") GUICtrlCreateLabel("Mot recherché", 24, 132, 86, 17) Global $InputMot = GUICtrlCreateInput("", 116, 129, 257, 21) GUICtrlSetFont(-1, 9) Global $ButtonLancerRechercheMot = GUICtrlCreateButton("Rechercher", 375, 127, 170, 25) Global $ButtonPressePapier = GUICtrlCreateButton("Copier dans le presse-papier", 548, 127, 170, 25) Global $LabelDico1 = GUICtrlCreateLabel("", 24, 158, 500, 17) GUICtrlSetBkColor(-1, 0xF0F9FD) GUICtrlSetColor(-1, 0x3399FF) Global $LabelDef1 = GUICtrlCreateLabel("", 24, 180, 692, 401) GUICtrlSetBkColor(-1, 0xF0F9FD) GUICtrlSetColor(-1, 0xB1B1FB) ; Onglet "Rechercher une liste de mots" Global $TabSheet2 = GUICtrlCreateTabItem(" Rechercher les définitions d'une liste de mots ") GUICtrlCreateLabel("Fichier TXT des mots", 24, 138, 142, 17) Global $InputFicTXT = GUICtrlCreateInput("", 178, 132, 437, 21) GUICtrlSetFont(-1, 9) Global $ButtonRechercherFicTXT = GUICtrlCreateButton("Rechercher", 620, 130, 100, 25) GUICtrlCreateLabel("(Le fichier TXT doit contenir un mot par ligne, sans rien d'autre)", 168, 156, 367, 17) GUICtrlSetColor(-1, 0x979999) GUICtrlCreateLabel("Démarrer à partir du mot", 24, 181, 142, 17) Global $InputMotDebut = GUICtrlCreateInput("", 178, 178, 270, 21) GUICtrlSetFont(-1, 9) GUICtrlCreateLabel("(Laisser vide pour commencer au premier mot)", 458, 181, 268, 17) GUICtrlSetColor(-1, 0x979999) GUICtrlCreateLabel("Fichier XML créé pour Excel", 24, 211, 152, 17) Global $InputFicXML = GUICtrlCreateInput("", 178, 208, 437, 21) GUICtrlSetFont(-1, 9) Global $ButtonRechercherFicXML = GUICtrlCreateButton("Rechercher", 620, 206, 100, 25) Global $RadioDicoXML1 = GUICtrlCreateRadio("Autant de lignes que de définitions d'un même mot", 24, 230, 310, 17) GUICtrlSetFont(-1, 8, 400, 2) GUICtrlSetState(-1, $GUI_CHECKED) Global $RadioDicoXML2 = GUICtrlCreateRadio("Toutes les définitions d'un même mot sur la même ligne", 380, 230, 336, 17) GUICtrlSetFont(-1, 8, 400, 2) Global $ButtonLancerListeMot = GUICtrlCreateButton("Lancer la création du fichier des définitions", 248, 252, 260, 25) Global $LabelStopper = GUICtrlCreateLabel("Appuyez sur la touche Echap (ESC) pour stopper la recherche", 178, 252, 420, 25) GUICtrlSetFont(-1, 9, 800) GUICtrlSetColor(-1, 0xFA7272) GUICtrlSetState(-1, $GUI_HIDE) Global $LabelDico2 = GUICtrlCreateLabel("", 24, 278, 500, 17) GUICtrlSetBkColor(-1, 0xF0F9FD) GUICtrlSetColor(-1, 0x3399FF) GUICtrlSetState(-1, $GUI_HIDE) Global $LabelNb = GUICtrlCreateLabel("", 500, 278, 216, 17, $SS_RIGHT) GUICtrlSetBkColor(-1, 0xF0F9FD) GUICtrlSetColor(-1, 0x3399FF) GUICtrlSetState(-1, $GUI_HIDE) Global $LabelDef2 = GUICtrlCreateLabel("", 24, 300, 692, 281) GUICtrlSetBkColor(-1, 0xF0F9FD) GUICtrlSetColor(-1, 0xB1B1FB) GUICtrlSetState(-1, $GUI_HIDE) GUICtrlCreateTabItem("") GUICtrlSetState($TabSheet1, $GUI_SHOW) GUISetState(@SW_SHOW) While 1 $sMsg = GUIGetMsg() Switch $sMsg Case $GUI_EVENT_CLOSE ExitLoop Case $TabMode If GUICtrlRead($TabMode) = 1 Then GUICtrlSetState($CheckboxDebugTrace, $GUI_SHOW) Else GUICtrlSetState($CheckboxDebugTrace, $GUI_HIDE) EndIf Case $ButtonLancerRechercheMot $bDebugTrace = (GUICtrlRead($CheckboxDebugTrace) = $GUI_CHECKED) $bDebugPage = (GUICtrlRead($CheckboxDebugPage) = $GUI_CHECKED) GUICtrlSetData($LabelDico1, "") GUICtrlSetData($LabelDef1, "") $sMot = StringStripWS(GUICtrlRead($InputMot), 7) If $sMot = "" Then MsgBox(4112, "Erreur", "Saisissez un mot", 0, $hForm) ContinueLoop EndIf $sDicoStrategie = DicoStrategie() If Not $sDicoStrategie Then ContinueLoop $aRetour = _DicoDefinition($sDicoStrategie, $sMot, $hForm, True, $bDebugPage) GUICtrlSetData($LabelDico1, DicoTitreDefinition($aRetour)) GUICtrlSetData($LabelDef1, DicoTexteDefinition($aRetour)) Case $ButtonPressePapier If ClipPut($LabelDico1 & @CRLF & $LabelDef1) Then MsgBox(8256, "Information", "La définition a été copiée dans votre presse-papier", 0, $hForm) Else MsgBox(4112, "Erreur", "ERREUR : La définition n'a pas été copiée dans votre presse-papier !!!", 0, $hForm) EndIf Case $ButtonRechercherFicTXT $sFileTXT = FileOpenDialog("Fichier TXT à traiter", "", "Fichier texte (*.txt)|Tous (*.*)", 1) If Not @error Then GUICtrlSetData($InputFicTXT, $sFileTXT) Case $ButtonRechercherFicXML $sFileXML = FileOpenDialog("Fichier XML à créer", "", "Fichier XML (*.XML)|Tous (*.*)") If Not @error Then GUICtrlSetData($InputFicXML, $sFileXML) Case $ButtonLancerListeMot $bDebugTrace = (GUICtrlRead($CheckboxDebugTrace) = $GUI_CHECKED) $bDebugPage = (GUICtrlRead($CheckboxDebugPage) = $GUI_CHECKED) $bXMLLigneParDef = (GUICtrlRead($RadioDicoXML1) = $GUI_CHECKED) $sFileTXT = StringStripWS(GUICtrlRead($InputFicTXT), 3) $sMotStart = StringStripWS(GUICtrlRead($InputMotDebut), 7) $sFileXML = StringStripWS(GUICtrlRead($InputFicXML), 3) If Not $sFileTXT Then MsgBox(4112, "Erreur", "Saisissez le fichier TXT des mots à rechercher", 0, $hForm) ContinueLoop EndIf If Not FileExists($sFileTXT) Then MsgBox(4112, "Erreur", "Le fichier TXT n'existe pas", 0, $hForm) ContinueLoop EndIf If Not $sFileXML Then MsgBox(4112, "Erreur", "Saisissez le fichier XML des définitions trouvées", 0, $hForm) ContinueLoop EndIf If FileExists($sFileXML) And MsgBox(8484, "Confirmer", "Le fichier XML existe déjà." & @CRLF _ & "Confirmez-vous la suppression de ce fichier ?", 0, $hForm) <> 6 Then ContinueLoop $hFileTXT = FileOpen($sFileTXT, 0) If $hFileTXT = -1 Then MsgBox(4112, "Erreur", "Le fichier TXT ne peut pas être ouvert", 0, $hForm) ContinueLoop EndIf $hFileXML = FileOpen($sFileXML, 10) If $hFileXML = -1 Then MsgBox(4112, "Erreur", "Le fichier XML ne peut pas être ouvert", 0, $hForm) ContinueLoop EndIf $sDicoStrategie = DicoStrategie() If Not $sDicoStrategie Then ContinueLoop GUICtrlSetData($LabelDico2, "") GUICtrlSetData($LabelNb, "") GUICtrlSetData($LabelDef2, "") GUICtrlSetState($ButtonLancerListeMot, $GUI_HIDE) GUICtrlSetState($LabelStopper, $GUI_SHOW) GUICtrlSetState($LabelDico2, $GUI_SHOW) GUICtrlSetState($LabelNb, $GUI_SHOW) GUICtrlSetState($LabelDef2, $GUI_SHOW) GUICtrlSetState($GraphicBloque, $GUI_SHOW) GUICtrlSetState($GraphicBloque, $GUI_ENABLE) $iNB = 0 $iNbKO = 0 $iNbOK = 0 $iMaxDef = 0 ControlFocus($hForm, "", $ButtonLancerListeMot) While 1 $iNB += 1 $sMot = FileReadLine($hFileTXT) If @error <> 0 Then ExitLoop $sMot = StringStripWS($sMot, 3) If ($sMot = "") Or StringInStr($sMot, " ") Then ContinueLoop If $sMotStart <> "" Then If $sMot = $sMotStart Then $sMotStart = "" Else ContinueLoop EndIf EndIf $aRetour = _DicoDefinition($sDicoStrategie, $sMot, $hForm, True, $bDebugPage) If $aRetour[0][0] > 0 Then If $aRetour[0][0] > $iMaxDef Then $iMaxDef = $aRetour[0][0] $sLog = "OK" $sTemp = "Dico:" & $aRetour[0][1] $iNbOK += 1 Else $sLog = "KO" $sTemp = "Erreur:" & $aRetour[0][1] $iNbKO += 1 EndIf If $bDebugTrace Then FileWriteLine(@ScriptDir & "\Trace-" & $sLog & ".txt", @MDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - Mot:" & $sMot & " - " & $sTemp) GUICtrlSetData($LabelDico2, DicoTitreDefinition($aRetour)) GUICtrlSetData($LabelNb, "Nb OK : " & $iNbOK & " Nb KO : " & $iNbKO) GUICtrlSetData($LabelDef2, DicoTexteDefinition($aRetour)) If $aRetour[0][0] = -2 Then ExitLoop ; Arrêt utilisateur If $aRetour[0][0] > 0 Then For $i = 1 To $aRetour[0][0] If $bXMLLigneParDef Or ($i = 1) Then FileWriteLine($hFileXML, '') FileWriteLine($hFileXML, DicoXMLString($sMot)) FileWriteLine($hFileXML, DicoXMLNumber($aRetour[0][0])) FileWriteLine($hFileXML, DicoXMLString($aRetour[0][1])) EndIf FileWriteLine($hFileXML, DicoXMLString($aRetour[$i][0])) FileWriteLine($hFileXML, DicoXMLString($aRetour[$i][1])) FileWriteLine($hFileXML, DicoXMLString($aRetour[$i][2])) If $bXMLLigneParDef Or ($i = $aRetour[0][0]) Then FileWriteLine($hFileXML, '') Next Else FileWriteLine($hFileXML, '') FileWriteLine($hFileXML, DicoXMLString($sMot)) FileWriteLine($hFileXML, DicoXMLNumber(0)) FileWriteLine($hFileXML, DicoXMLString($sDicoStrategie)) FileWriteLine($hFileXML, DicoXMLString($aRetour[0][1])) FileWriteLine($hFileXML, '') EndIf Sleep(10) WEnd FileClose($hFileTXT) ; Fin du fichier XML FileWriteLine($hFileXML, '' & @CRLF & '' & @CRLF & '') FileClose($hFileXML) ; Entête du fichier XML $sXMLTemp = @ScriptDir & "\XMLTemp" & Random(100000, 999999, 1) & ".Xml" $hFileXML = FileOpen($sXMLTemp, 10) FileWriteLine($hFileXML, '' & @CRLF & '' _ & @CRLF & '' _ & @CRLF & '' & @CRLF & '' _ & @CRLF & '') FileWriteLine($hFileXML, DicoXMLString("Mot Recherché")) FileWriteLine($hFileXML, DicoXMLString("Nb déf.")) FileWriteLine($hFileXML, DicoXMLString("Dictionnaire")) If $bXMLLigneParDef Then $iMaxDef = 1 For $i = 1 To $iMaxDef If $iMaxDef > 1 Then $sTemp = " " & $i Else $sTemp = "" EndIf FileWriteLine($hFileXML, DicoXMLString("Mot" & $sTemp)) FileWriteLine($hFileXML, DicoXMLString("Catégorie" & $sTemp)) FileWriteLine($hFileXML, DicoXMLString("Définition" & $sTemp)) Next FileWriteLine($hFileXML, '') FileClose($hFileXML) ; Fusionner le corps et l'entête du fichier $sTemp = @ScriptDir & "\XMLTemp" & Random(1000, 9999, 1) & ".Xml" FileDelete($sTemp) RunWait(@ComSpec & ' /c COPY /B "' & $sXMLTemp & '"+"' & $sFileXML & '" "' & $sTemp & '"', @ScriptDir, @SW_HIDE) FileCopy($sTemp, $sFileXML, 9) Sleep(300) FileDelete($sTemp) FileDelete($sXMLTemp) ; Afficher/masquer les objets GUICtrlSetState($GraphicBloque, $GUI_DISABLE) GUICtrlSetState($GraphicBloque, $GUI_HIDE) GUICtrlSetState($ButtonLancerListeMot, $GUI_SHOW) GUICtrlSetState($LabelStopper, $GUI_HIDE) GUICtrlSetState($LabelDico2, $GUI_HIDE) GUICtrlSetState($LabelNb, $GUI_HIDE) GUICtrlSetState($LabelDef2, $GUI_HIDE) ; Fin MsgBox(8256, "Information", "Le fichier XML a été créé :" & @CRLF & $sFileXML & @CRLF & @CRLF _ & "Nb Mots OK : " & $iNbOK & @CRLF & "Nb Mots KO : " & $iNbKO, 0, $hForm) EndSwitch Sleep(20) WEnd Func DicoXMLString($sVal) ; !DATA[ permet de ne pas interpréter le contenu de $sVal, en particulier : ; - les satuts de lignes qui pourraient être remplacer par " " ; - les "&", ">" et "<" ... Return '' EndFunc Func DicoXMLNumber($iVal) Return '' & Number($iVal) & '' EndFunc Func DicoStrategie() Select Case GUICtrlRead($RadioDico1) = $GUI_CHECKED Return "D" Case GUICtrlRead($RadioDico2) = $GUI_CHECKED Return "L" Case GUICtrlRead($RadioDico3) = $GUI_CHECKED Return "T" Case GUICtrlRead($RadioDico4) = $GUI_CHECKED Return "X" Case GUICtrlRead($RadioDico5) = $GUI_CHECKED Local $s, $i $s = GUICtrlRead($InputMulti) For $i = 1 To StringLen($s) If Not StringInStr("DLTX/", StringMid($s, $i, 1)) Then MsgBox(4112, "Erreur", "La liste des dictionnaires multi n'est pas bien définie", 0, $hForm) $s = "" ExitLoop EndIf Next Return $s EndSelect EndFunc Func DicoTitreDefinition($aRetour) If $aRetour[0][0] <= 0 Then Return $aRetour[0][1] Else Local $s Switch $aRetour[0][0] Case 1 $s = "Une définition" Case 2 $s = "Deux définitions" Case 3 $s = "Trois définitions" Case Else $s = $aRetour[0][0] & " définitions" EndSwitch Return $s & " du mot " & $sMot & " sur " & $aRetour[0][1] EndIf EndFunc Func DicoTexteDefinition($aRetour) Local $s = "" For $i = 1 To $aRetour[0][0] $s &= $aRetour[$i][0] & @TAB & "(" & $aRetour[$i][1] & ")" & @CRLF & $aRetour[$i][2] If $i <> $aRetour[0][0] Then $s &= @CRLF & @CRLF Next Return $s EndFunc